Java ResultSet 列数始终为 1

标签 java mysql sql jdbc

我想显示一个表的列号,但它总是显示数字 1。我写了下面的代码:

Class.forName(JDBC_DRIVER);
java.sql.Connection con=DriverManager.getConnection(DB_URL,USER,PASS); 

try (Statement stmt = (Statement) con.createStatement()) {
            String sql;

            sql = "SELECT count(*) FROM information_schema.columns WHERE 
                   table_name=\"my_b\"";

            try ( 
                ResultSet rs = stmt.executeQuery(sql)) {
                int columCount = rs.getMetaData().getColumnCount();
                System.out.println("Column number is: "+columCount);
            }
            stmt.close();
            con.close();

哪里出错了?

最佳答案

首先,您已经很长时间不需要 Class.forName 来加载您的 JDBC 驱动程序了。其次,您正在选择一个值,但您正在读取元数据。第三,当使用 try-with-resources 时,您不需要明确的关闭调用(并且您的 Connection 应该在 finally 中关闭,因为例子)。最后,使用PreparedStatement 并绑定(bind)参数。喜欢,

java.sql.Connection con = DriverManager.getConnection(DB_URL, USER, PASS);
String query = "SELECT count(*) FROM information_schema.columns WHERE table_name=?";
try (PreparedStatement stmt = con.prepareStatement(query)) {
    stmt.setString(1, "my_b");
    try (ResultSet rs = stmt.executeQuery()) {
        if (rs.next()) {
            int columCount = rs.getInt(1);
            System.out.println("Column number is: " + columCount);
        } else {
            System.out.println("No rows");
        }
    }
} finally {
    con.close();
}

关于Java ResultSet 列数始终为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44487524/

相关文章:

java - Java 中的批量输入?

java - 处理超过 7 个参数

mysql - 规范化,困惑

java - 在 Java 中有条件地向数组添加一个项目

java - ArrayList 的 ArrayList,默认值

php - 文件上传在本地主机上工作,但在服务器上发布后不起作用

php - 如何解析日志文件并将数据加载到数据库中

php - 选择所有行,除非此条件为真

java - 当用户单击窗口右上角的 "x"而不是按钮时,加入超时选项。

mysql - 每个用户返回 2 行