我在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中的方法是什么? 谢谢你的帮助。
答案 0 :(得分: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() + "'";
答案 1 :(得分:0)
在Java中,括号访问仅允许用于普通数组。使用括号String[] stringArray
声明一个数组。在内部,Java处理String
内的char数组。
查看您的代码,看起来让您感到困惑的是String
和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_list
和Table_list
很容易被代码阅读器混淆(甚至会让您感到困惑)。< / p>