1

我在 java 中编写了这个查询,它给了我表的列表并将它们保存在数据集合中:

sql = "select * FROM information_schema.tables WHERE table_type = 'BASE TABLE'";
ResultSet rs = stmt.executeQuery(sql);
int count_table = 0;
while (rs.next()) {
    table_list.add(rs.getString(3));
    count_table += 1;
}
Table_list = table_list.toString();

Table_list 是字符串。但是当我想以这种方式在另一个查询中使用这个列表时:

sql="SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + Table_list[t] + "'";

给我这个错误:

array required, but java.lang.String found

我在 c# 中使用了它并且运行良好:

"SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + tablelist[t].Trim() + "'";

java中的相同方式是什么?感谢帮助。

4

2 回答 2

1
sql="SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + Table_list[t] + "'";

应改为:

sql="SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + table_list.get(t).trim() + "'";
于 2013-03-28T15:51:14.630 回答
0

在 Java 中,方括号访问只允许用于普通数组。您使用方括号声明一个数组String[] stringArray。在内部,Java 处理String.

查看您的代码,您似乎在混淆 aString和 a List<String(或ArrayList<String>).

为了访问List/ArrayList元素,您应该使用get方法(注意我使用的是table_list,而不是Table_list):

//wrong
sql="SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + table_list[t] + "'";

//right
sql="SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + table_list.get(t).trim() + "'";

请注意,通过这样做,您的代码对 SQL 注入攻击很弱。相反,你应该使用PreparedStatement来处理这个:

sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ?";
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setString(1, table_list.get(t));
ResultSet rs = stmt.executeQuery();

另外,更改变量的名称,因为代码阅读table_listTable_list很容易混淆(甚至会让您感到困惑)。

于 2013-03-28T15:58:59.503 回答