我想显示一个表的列号,但它总是显示数字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();
错误在哪里?
答案 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(*)
,因为这会返回单个结果。