我想显示一个表的列号,但它总是显示数字 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/