gpt4 book ai didi

java - DatabaseMetaData#g​​etColumns 返回一个空的结果集

转载 作者:行者123 更新时间:2023-11-29 02:48:44 25 4
gpt4 key购买 nike

我在使用 Java 和 NetBeans 从本地运行的 Ubuntu 14 MySQL 连接检索元数据时遇到问题。我从 DatabaseMetaData 对象的 getColumns 方法得到一个空的结果集。

代码如下:

private static HashMap getColumnsFromDB(Connection con, String dbSchema, String tableName)    throws SQLException 
{
HashMap Columns = new HashMap();

DatabaseMetaData metadata = con.getMetaData();

ResultSet rsColumns = metadata. getColumns(null, dbSchema.toUpperCase(), tableName.toUpperCase(), "%");

while (rsColumns.next())
{
ColumnClass col = new ColumnClass();
col.column_name = rsColumns.getString("COLUMN_NAME");
col.mw_type = UtilClass.toClass(rsColumns.getInt("DATA_TYPE")); // Convert to java type
col.is_nullable = rsColumns.getString("IS_NULLABLE");
col.column_default = rsColumns.getString("COLUMN_DEF");

Columns.put( col.column_name, col);
}

return Columns;
}

我可以正常查询数据库,用户是 DBA,表有列,我在其他问题中看到用例等可能有点棘手,但我已经尝试了很多方法并且我没有预期的结果。

最佳答案

对于 MySQL,术语“架构”和“数据库”的含义相同。测试表明 MySQL Connector/J 不会关注 DatabaseMetaData#g​​etColumns 方法的 schemaPattern 参数。

所以,如果你使用像这样的连接字符串

jdbc:mysql://localhost/db1

然后尝试检索有关名为 db2 的“模式”(“数据库”)中表的列的信息

DatabaseMetaData metadata = con.getMetaData();
ResultSet rsColumns = metadata.getColumns(null, "db2", "mytable", "%");

如果数据库 db1 中没有名为 mytable 的表,您将得到一个空的结果集。为了在 db2 中检索表的信息,您需要使用 catalog 参数

DatabaseMetaData metadata = con.getMetaData();
ResultSet rsColumns = metadata.getColumns("db2", null, "mytable", "%");

或使用setCatalog更改当前数据库

con.setCatalog("db2");
DatabaseMetaData metadata = con.getMetaData();
ResultSet rsColumns = metadata.getColumns(null, null, "mytable", "%");

请注意,第二个参数——schemaPattern——在上面两个工作示例中是null,但实际上它可以是任何东西;它只是被忽略了。

编辑回复:评论

OP 报告说设置 catalog 参数确实是必需的方法,并且该表(大概还有列)名称在 Linux 下似乎区分大小写。 (我的测试表明这些名称在 Windows 下区分大小写。)

关于java - DatabaseMetaData#g​​etColumns 返回一个空的结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38557956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com