如何在java中使用查询结果

时间:2013-03-28 15:43:50

标签: java

我在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中的方法是什么? 谢谢你的帮助。

2 个答案:

答案 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数组。

查看您的代码,看起来让您感到困惑的是StringList<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很容易被代码阅读器混淆(甚至会让您感到困惑)。< / p>