在MSSQL中,如果metadata.getTables结果集为空,怎么办?

4

我试图从一个数据库中获取所有表名。我使用以下代码行来实现这一点。

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)下获取表详细信息的区别;因为在我的情况下,我的数据库可能是以上任何一种。请问有人可以帮忙吗?


当您使用MSSQL时,是否遇到过任何NullPointerException? - UVM
不,我没有收到任何异常。但是结果集为空,就像在mssql中一样。 - TKV
mysql和mssql需要不同的连接器... mssql使用com.microsoft.sqlserver.jdbc.SQLServerDriver mysql使用com.mysql.jdbc.Driver - pavi
3个回答

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();

您可以在此页面尝试此链接:

列出所有表 - getTables()


0

OP正在寻找除MySQL以外的解决方案。 - Ravinder Reddy

0
MySQL安装附带默认数据库。其中一个数据库名为“mysql”。如果您使用“mysql”数据库并尝试获取元数据和表名称,则会返回空结果。我通过创建另一个名为“mydb”的数据库并使用它来获取元数据和表名称进行了验证。这在翻转中起作用。
看起来MYSQL在使用名为“mysql”的默认数据库时存在一些问题或限制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接