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