【问题标题】:Can’t print tables from a database with JDBC无法使用 JDBC 从数据库中打印表
【发布时间】:2023-03-11 03:45:01
【问题描述】:

我试图弄清楚如何让这段最初为 MySQL 编写的代码与(Microsoft)SQL Server 一起工作。 当它被调用时,它应该打印出以表格形式存储在数据库中的航班目的地,(dbo.London,(dbo.NewYork 等。但是现在,它不会打印任何东西,不也有错误。我使用的是默认的 MSSQL 架构名称,dbo

public void viewFlights(Connection conn) throws SQLException {
    String SCHEMA_NAME="${dbo}";

    try {
        DatabaseMetaData metaData = conn.getMetaData();
        String[] tableType = {"TABLE"};

        ResultSet rs = metaData.getTables(null, SCHEMA_NAME, null, tableType);
            while (rs.next()) {
                String tableName = rs.getString(3);
                System.out.println(tableName);
            }

        } catch (SQLException e) {
        e.printStackTrace();
    }
}

知道我在这里错过了什么吗?

【问题讨论】:

  • 你使用的架构名称是${dbo},你试过dbo吗?
  • 同意“检查架构名称”。看来您的意思是要在其中插入一些变量“dbo”,但getTables() 不会做任何此类事情。此外:将数据存储在表名中是一个……有趣的……设计决策(并且充满了危险)。请重新考虑 - 例如,某些 rdbms(我认为 MySQL 是其中之一)不会像您对 db 对象名称所期望的那样保留大写/编码。另外:你几乎肯定想开始使用 ResultSet 的 try-with-resources。
  • @DavidBrowne-Microsoft 成功了,非常感谢!

标签: java sql-server jdbc


【解决方案1】:

为您的数据库设置默认方案或 使用架构名称作为 字符串 SCHEMA_NAME="{schema.dbo}";

【讨论】:

  • 按照@DavidBrowne-Microsoft 的建议,只需将 "${dbo}" 替换为 "dbo" 即可解决。我不确定我是否误解了您的回答,但String SCHEMA_NAME="{schema.dbo}"; 没有返回任何内容。我可以只更改架构,但数据库是由另一段代码创建的,所以我认为默认设置不会使它过于混乱。
【解决方案2】:

David Browne's评论解决!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多