[英]Java ResultSet Column count is always 1
我想显示一个表的列号,但它始终显示数字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();
错误在哪里?
问题在于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);
}
首先,您不需要很长时间就可以使用Class.forName
加载JDBC驱动程序。 其次,您正在选择一个值,但是正在读取元数据。 第三,当使用try-with-resources
您不需要显式的close调用(例如,您的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();
}
您不是在获取查询结果,而是在询问结果集元数据该结果集有多少列。 并且由于您的查询仅产生单个列(即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 );
}
}
Class.forName(JDBC_DRIVER);
java.sql.Connection con=DriverManager.getConnection(DB_URL,USER,PASS);
try (Statement stmt = (Statement) con.createStatement()) {
String sql = "SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = 'database_name' AND table_name = 'table_name'"
try (
ResultSet rs = stmt.executeQuery(sql)) {
//int columCount = rs.getMetaData().getColumnCount();
ResultSetMetaData rsmd = rs.getMetaData();
int columnsNumber = rsmd.getColumnCount();
System.out.println("Column number is: "+columnsNumber );
}
stmt.close();
con.close();
请尝试SELECT * FROM information_schema.columns WHERE table_name=\\"my_b\\"
在查找所有列时,只需忽略count(*)
因为这将返回单个结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.