20

我有一个与 MySQL 数据库的 Java 程序连接,如何在同一连接上将当前数据库更改为不同的数据库?

我像这样连接到 MySQL:

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

经过一些操作后,我想在同一连接上连接到不同的 mysql 数据库。我怎样才能做到这一点?

我尝试使用:

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

但这不会改变要使用的数据库。

4

2 回答 2

36

MySQL 文档中所述,您需要使用它Connection.setCatalog()来切换到另一个数据库。它还明确表示您不应执行aUSE <databasename>切换。

出现此警告的原因是 JDBC 是数据库的通用接口,因此为大多数常见任务提供了方法,包括切换catalogs(或databases在 MySQL 中)。JDBC 规范/javadoc 还明确指出人们应该使用 API 而不是数据库特定的命令(如果两者都可用)。这有几个原因:1) 它促进了独立于数据库的代码,以及 2) 驱动程序可能会在内部执行其他操作以响应 API 方法之一。使用特定于数据库的命令可能会导致驱动程序行为异常,因为其内部状态与数据库状态不匹配。

调用setCatalog(String)不会影响现有语句,如 JDBC API 文档中所述:

调用setCatalog对先前创建或准备好的Statement对象没有影响。ConnectionDBMS 准备操作是否在方法prepareStatement或被prepareCall调用时立即发生是由实现定义的。为了获得最大的可移植性,setCatalog应该在Statement创建或准备 a 之前调用。

于 2012-11-17T18:18:55.563 回答
4

您可以像这样在表名上为数据库名称添加前缀。

例如:db1 has table1db2 has table2

select * from db1.table1, db2.table2;

这将允许您进行跨数据库查询

于 2012-11-17T18:19:07.910 回答