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 は .char 内で char 配列を処理しStringます。

コードを見ると、 aStringと a List<String(またはArrayList<String>).

List/ArrayList要素にアクセスするには、メソッドを使用する必要があります (ではなくgetを使用していることに注意してください)。table_listTable_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 に答える