我有一个与MySQL数据库的Java程序连接,如何在同一连接上将当前数据库更改为另一个数据库?
我这样连接到MySQL:
DriverManager.getConnection("jdbc:mysql://"+server+"/",log,pass);
经过一些操作后,我想在同一连接上连接到另一个mysql数据库。我怎样才能做到这一点?
我尝试使用:
Statement stat= con.createStatement(); ResultSet r=stat.executeQuery("use mysql");
但这不会更改要使用的数据库。
如MySQL文档中所述,您需要Connection.setCatalog()用于切换到另一个数据库。这也明确地说,你应该 不 执行USE <databasename>切换。
Connection.setCatalog()
USE <databasename>
发出此警告的原因是JDBC是数据库的通用接口,因此JDBC提供了用于大多数常见任务的方法,包括切换catalogs(或databases在MySQL中如此)。JDBC规范/ javadoc还明确指出,人们应该通过数据库特定的命令来使用API(如果两者均可用)。造成这种情况的原因有很多:1)它促进了与数据库无关的代码,2)驱动程序可能会在内部对API方法之一做出额外的响应。使用特定于数据库的命令可能会导致驱动程序出现异常,因为其内部状态与数据库状态不匹配。
catalogs
databases
调用setCatalog(String)不会影响现有语句,如JDBC API文档中所指定:
setCatalog(String)
调用setCatalog对先前创建或准备的Statement对象无效。它是限定的数据库管理系统是否准备操作立即发生在当执行Connection方法prepareStatement或prepareCall调用。为了获得最大的可移植性,setCatalog应在Statement创建或准备a之前调用它。
setCatalog
Statement
Connection
prepareStatement
prepareCall