在表格中插入arraylist的各个值

时间:2013-03-29 19:26:10

标签: java sql database insert arraylist

我有一个字符串的arraylist

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

我需要在数据库中的3个不同的行中插入这些URL。这就是我这样做的方式。

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();
 }

这是无限循环。 有人可以帮我纠正我的代码吗?插入部分代码很好。但我没有得到个人网址。

谢谢!

3 个答案:

答案 0 :(得分:2)

试试这个:

String insert = "INSERT into test (url) values (?)";
for (String url : myList) {
    prepstmt = conn.prepareStatement(insert);
    prepstmt.setString(1, url);
    prepstmt.executeUpdate();
}

答案 1 :(得分: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-loop。

还有一条建议。创建这样的列表:

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

<强>更新

这是我的一个例子:

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);
        }
}

答案 2 :(得分:0)

发布完整堆栈跟踪:

  

[3/30/13 2:35:00:241 GMT-06:00] 00000251 SystemOut O   com.ibm.dw.register.PubHandler handleMessage(String promoter,   字符串主题,字符串消息)com.ibm.db2.jcc.am.eo:a的值   EXECUTE或OPEN语句中的主机变量超出其范围   相应的用途.. SQLCODE = -302,SQLSTATE = 22001,DRIVER = 3.57.1​​10