在 mssql 的情况下 metadata.getTables 结果集为空
Posted
技术标签:
【中文标题】在 mssql 的情况下 metadata.getTables 结果集为空【英文标题】:metadata.getTables resultset empty in case of mssql 【发布时间】:2012-07-04 14:10:09 【问题描述】:我正在尝试从数据库中选择所有表名。我为此使用以下代码行。
DatabaseMetaData databaseMetaData = connection.getMetaData();
resultSet = databaseMetaData.getTables(null, dbName, null, null);
while(resultSet.next())
//doing operations - take table name and all that
这里的问题是在 mysql 的情况下它工作正常,这意味着如果底层数据库是 mysql - 没问题。但是当我用 mssql 尝试相同的代码时,结果集是空的。是否还有其他替代方法可以从 mssql 数据库中获取表详细信息。
如果它..请提供在 mysql、mssql、oracle 等 diff 数据库下获取表详细信息的区别;因为就我而言,我的数据库可能是上述任何一种。 任何人都可以在这方面提供帮助。
【问题讨论】:
您在使用 MSSQL 时是否遇到 NullPointerException? 不,我没有遇到任何异常。但是结果集是空的,如 mssql mysql 和 mssql 采用不同的连接器... com.microsoft.sqlserver.jdbc.SQLServerDriver for mssql com.mysql.jdbc.Driver for mysql 【参考方案1】:获取代码,例如:
Connection con = null;
try
Class.forName(
"com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(
"jdbc:sqlserver://localhost:1269;"
+ "user=sa;password=HerongYang;"
+ "database=AdventureWorksLT");
DatabaseMetaData meta = con.getMetaData();
ResultSet res = meta.getTables(null, null, null,
new String[] "TABLE");
System.out.println("List of tables: ");
while (res.next())
System.out.println(
" "+res.getString("TABLE_CAT")
+ ", "+res.getString("TABLE_SCHEM")
+ ", "+res.getString("TABLE_NAME")
+ ", "+res.getString("TABLE_TYPE")
+ ", "+res.getString("REMARKS"));
res.close();
con.close();
您可以在此页面尝试此链接:
Listing All Tables - getTables()
【讨论】:
【参考方案2】:我认为以下链接会对您有所帮助。
http://www.roseindia.net/jdbc/jdbc-mysql/AllTableName.shtml
【讨论】:
OP 正在寻找 MySQL 以外的解决方案。【参考方案3】:MySQL 安装附带默认数据库。其中一个数据库名为“mysql”。如果您使用“mysql”数据库并尝试获取元数据和表名,它会给出空结果。 我通过创建另一个名为“mydb”的数据库来验证这一点,然后用它来获取元数据,然后是表名。它可以翻转。
似乎 MYSQL 在使用名为 'mysql' 的默认数据库时存在一些问题或限制
【讨论】:
以上是关于在 mssql 的情况下 metadata.getTables 结果集为空的主要内容,如果未能解决你的问题,请参考以下文章
在 mssql 的情况下 metadata.getTables 结果集为空
在执行动态插入脚本的情况下,如何在 MSSQL 存储过程中选择新插入的记录?
是否可以在没有准备好的语句(Node.js 和 MSSQL)的情况下防止 SQL 注入