Java ResultSet列数始终为1

时间:2017-06-11 18:52:18

标签: 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();

错误在哪里?

5 个答案:

答案 0 :(得分:0)

问题是ResultSet.getColumnCount返回查询结果集中的列数,而不是表中的列数。

如果您尝试获取表格上的列数,则您的查询是正确的。您只需要检索查询的结果,而不是其元数据。

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

        try ( 
            ResultSet rs = stmt.executeQuery(sql));
            rs.next();
            int columCount = rs.getInt(1);
            System.out.println("Column number is: " + columCount);
        }

答案 1 :(得分:0)

首先,您无需Class.forName长时间加载JDBC驱动程序。其次,您正在选择一个值,但您正在阅读元数据。第三,使用try-with-resources时,您不需要明确的近距离通话(例如,您的Connection应在finally中关闭。最后,使用PreparedStatement并绑定参数。像,

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

答案 2 :(得分:0)

您没有检索查询结果,而是询问结果集元数据结果集有多少列。由于您的查询只生成一个列(即COUNT(*)),因此ResultSetMetaData.getColumnCount()的结果为1,且该值正确。

如果您想获得查询的结果,您需要从结果集中获取它:

try (ResultSet rs = stmt.executeQuery(sql)) {
    if (rs.next()) {
        int columnsNumber = rs.getInt(1);
        System.out.println("Column number is: "+columnsNumber );
    }
}

答案 3 :(得分:-1)

file:/mnt
file:////<IP>:<export_path>

答案 4 :(得分:-2)

尝试SELECT * FROM information_schema.columns WHERE table_name=\"my_b\"

在您查找所有列时,只需省略count(*),因为这会返回单个结果。