我的代码非常复杂,因此无法全部显示,但是这一部分非常简单。
我有一个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驱动程序,否则在对ResultSet调用.getMetaData()之前,在Connection上调用.getMetaData()之间应该没有问题。您很可能不小心更改了toUse的值。确认您没有意外更改其值的一种方法是使局部变量为final。
附言代替这个:
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 = ", ";
}
循环内不需要分支条件。