Подтвердить что ты не робот

Java, как изменить текущую базу данных на другую?

У меня есть Java-соединение с базой данных MySQL, как я могу изменить текущую базу данных на другую в том же соединении?

Я подключаюсь к MySQL следующим образом:

DriverManager.getConnection("jdbc:mysql://"+server+"/",log,pass);

После некоторых операций я хочу подключиться к другой базе данных mysql в том же соединении. Как я могу это сделать?

Я попытался использовать:

Statement stat= con.createStatement();
ResultSet r=stat.executeQuery("use mysql"); 

Но это не изменяет используемую базу данных.

4b9b3361

Ответ 1

Как описано в документации MySQL, вам нужно использовать Connection.setCatalog() для переключения на другую базу данных. Он также явно говорит, что вы должны не выполнить USE <databasename> для переключения.

Причиной этого предупреждения является то, что JDBC является общим интерфейсом к базам данных и поэтому предоставляет методы для большинства распространенных задач, включая переключение catalogs (или databases, как и в MySQL). Спецификация JDBC/javadoc также явно говорит о том, что люди должны использовать API для конкретных команд базы данных (если они доступны). Для этого есть несколько причин: 1) он продвигает независимый от базы данных код и 2) драйвер может делать дополнительные вещи внутренне в ответ на один из методов API. Использование команд, специфичных для базы данных, может привести к неверному функционированию драйвера, поскольку его внутреннее состояние не соответствует состоянию базы данных.

Вызов setCatalog(String) не будет влиять на существующие операторы, как указано в документации API JDBC:

Вызов setCatalog не влияет на ранее созданные или подготовленные объекты Statement. Реализация определяется, выполняется ли операция подготовки СУБД немедленно, когда вызывается метод Connection prepareStatement или prepareCall. Для максимальной переносимости setCatalog следует вызвать до создания или подготовки Statement.

Ответ 2

Вы можете префикс имени базы данных в именах таблиц следующим образом.

Например: db1 has table1 и db2 has table2

select * from db1.table1, db2.table2;

Это позволит вам выполнять кросс-запросы к базе данных