如何使用JDBC连接单个服务器上的多个数据库?

时间:2016-06-18 04:57:57

标签: java mysql database jdbc

我尝试在单个正在运行的实例上访问多个数据库中的数据。这些数据库的表结构都是一样的;据我所知,使用jdbc创建一个新的连接是非常昂贵的。但是jdbc的连接字符串需要这样的格式 jdbc:mysql://hostname/ databaseName,需要指定特定的数据库。 所以我想知道有没有办法使用一个连接查询多个数据库中的数据?

Multiple databases on a single running instance

1 个答案:

答案 0 :(得分:1)

关于这个主题的MySQL文档很糟糕。

即使您不使用JOIN子句,SELECT Syntax页面也会引用JOIN Syntax页面,了解如何编写表名。 JOIN Syntax页面只是说 tbl_name ,而没有进一步定义它是什么。底部甚至还有一条评论说:

  

此页面需要明确指出表引用的格式为schema_name.tbl_name,因此数据库之间的连接是可行的。

Schema Object Names页面没有说明限定名称,但确实有一个名为Identifier Qualifiers的子页面,该子页面表示可以使用语法引用表列 db_name.tbl_name.col_name。该页面没有说明使用db_name.tbl_name引用的能力。

但是,如果您可以使用db_name.tbl_name.col_name引用,那么只有使用{{1}引用才有意义这意味着,如果您必须在SQL语句中限定表名,则可以使用单个db_name.tbl_name访问所有数据库。

正如@MarkRotteveel在评论中所提到的,您也可以使用Connection.setCatalog(String catalog)方法切换数据库。

MySQL Connector/J 5.1 Developer Guide

中记录了这一点
  

连接的初始数据库

     

如果未指定数据库,则建立连接时不使用默认数据库。在这种情况下,要么在Connection实例上调用Connection方法,要么在SQL中使用数据库名称(即setCatalog())完全指定表名。在不指定要使用的数据库的情况下打开连接通常仅在构建使用多个数据库(例如GUI数据库管理器)的工具时才有用。

     

注意:始终使用SELECT dbname.tablename.colname FROM dbname.tablename...方法在JDBC应用程序中指定所需的数据库,而不是Connection.setCatalog()语句。