0

文字列の配列リストがあります

ArrayList myList = new ArrayList();
myList = [url1,url2,url3];

これらの URL をデータベースの 3 つの異なる行に挿入する必要があります。これが私のやり方です。

while(myList.size()!=0) 
{
  //get individual values in the array list
  int idx=0;
 String url= myList.get(idx++).toString() ;
  String insert="INSERT into test (url) values (?)";
  prepstmt = conn.prepareStatement(insert);
  prepstmt .setString(r++, url);
  prepstmt.executeUpdate();
 }

これは無限ループに入ります。誰かが私のコードを修正するのを手伝ってくれますか? コードの挿入部分は問題ありません。しかし、個々の URL を取得できません。

ありがとう!

4

3 に答える 3

2

これを試して:

String insert = "INSERT into test (url) values (?)";
for (String url : myList) {
    prepstmt = conn.prepareStatement(insert);
    prepstmt.setString(1, url);
    prepstmt.executeUpdate();
}
于 2013-03-29T19:35:20.960 に答える
1

@niculare は、コードを変更するために必要な最善の方法を提供します。

ただし、for ループを使用したくない場合は、if ステートメントを次のように変更する必要があります。

int idx=0;
while(idx < myList.size()) 
{
  String url= myList.get(idx).toString() ;
  String insert="INSERT into test (url) values (?)";
  prepstmt = conn.prepareStatement(insert);
  prepstmt .setString(r++, myURL);
  idx++;
 }

または、このリストがもう必要ない場合は、remove メソッドを使用します。

while(myList.size()!=0) 
{
  //get individual values in the array list
  int idx=0;
  String url= myList.remove(idx++).toString() ;
  String insert="INSERT into test (url) values (?)";
  prepstmt = conn.prepareStatement(insert);
  prepstmt .setString(r++, myURL);
 }

listIterator を使用できます。

    ListIterator<String> iter = myList.listIterator();
    while(iter.hasNext()){
        String url = (String) iter.next();
        String insert="INSERT into test (url) values (?)";
        prepstmt = conn.prepareStatement(insert);
        prepstmt .setString(r++, myURL);
    }

繰り返しますが、最善の方法は for ループを使用することです。

そしてもう一つアドバイス。次のようにリストを作成します。

List<String> myList = new ArrayList<String>();

アップデート

これは私の例の1つです:

public class test2 {

    public static void main(String ... args) {
        ArrayList<String> myList = new ArrayList<String>();
        myList.add("123");
        myList.add("245");
        myList.add("678");
        ListIterator<String> iter = myList.listIterator();
        while(iter.hasNext()){
            String url = (String) iter.next();
            System.out.println(url);
        }
}
于 2013-03-29T19:49:25.643 に答える
0

完全なスタック トレースの投稿:

[3/30/13 2:35:00:241 GMT-06:00] 00000251 SystemOut O com.ibm.dw.register.PubHandler handleMessage (ストリング・プロモーター、ストリング・トピック、ストリング・メッセージ) com.ibm.db2.jcc。 am.eo: EXECUTE または OPEN ステートメントのホスト変数の値が、対応する用途の範囲外です.. SQLCODE=-302、SQLSTATE=22001、DRIVER=3.57.1​​10

于 2013-03-30T08:56:13.153 に答える