我有相当复杂的代码,所以我无法全部显示,但这部分非常简单。
我有一个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;
答案 0 :(得分:1)
除非你以某种方式得到一个破坏的jdbc驱动程序,否则在Connection上调用.getMetaData()之前调用连接上的.getMetaData()之间应该没有问题。你很可能不小心改变了toUse的值。验证您没有意外更改其值的一种方法是使本地变量最终。
P.S。而不是:
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 = ", ";
}
不需要循环内的分支条件。