gpt4 book ai didi

java - JDBC 为什么它返回所有可用的表?

转载 作者:行者123 更新时间:2023-12-01 15:39:00 25 4
gpt4 key购买 nike

我的代码相当复杂,因此无法全部展示,但这部分非常简单。

我有一个 SELECT * FROM myTable ,它将结果集返回到该方法,该方法应该打印它,toUse 是传递给该方法的结果集的名称:

ResultSetMetaData rsmd = (ResultSetMetaData) toUse.getMetaData();      

System.out.println("");

int numberOfColumns = rsmd.getColumnCount();

for (int i = 1; i <= numberOfColumns; i++) {
if (i > 1) System.out.print(", ");
String columnName = rsmd.getColumnName(i);
System.out.print(columnName);
}
System.out.println("");

while (toUse.next()) {
for (int i = 1; i <= numberOfColumns; i++) {
if (i > 1) System.out.print(", ");
String columnValue = toUse.getString(i);
System.out.print(columnValue);
}
System.out.println("");
}

它不是打印出我选择的表,而是执行 SHOW TABLES; 命令?

编辑:

我认为这与之前的运行有关:

java.sql.DatabaseMetaData meta = con.getMetaData();
results = meta.getTables(null, null, null, new String[]{"TABLE"});

while (results.next()) {

String tableName = results.getString("TABLE_NAME");
if(tableName.equals(parameters)){
return true;
}

}
results.close();
return false;

最佳答案

除非您的 jdbc 驱动程序损坏,否则在连接上调用 .getMetaData() 之前在 ResultSet 上调用 .getMetaData() 应该没有问题。您很可能不小心更改了 toUse 的值。验证您没有意外更改其值的一种方法是将局部变量设为最终变量。

附注而不是这个:

for (int i = 1; i <= numberOfColumns; i++) {
if (i > 1) System.out.print(", ");
String columnValue = toUse.getString(i);
System.out.print(columnValue);
}

这样做:

String delimiter = "";
for (int i = 1; i <= numberOfColumns; i++) {
String columnValue = toUse.getString(i);
System.out.print(delimiter);
System.out.print(columnValue);
delimiter = ", ";
}

循环内不需要分支条件。

关于java - JDBC 为什么它返回所有可用的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8389236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com