0

我有一个字符串数组列表

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

这进入无限循环。有人可以帮我更正我的代码吗?插入部分代码就可以了。但我无法获得个人网址。

谢谢!

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

@nicilee 提供了更改代码所需的最佳方式。

但是如果你不想使用 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>();

更新

这是我的一个例子:

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(String promoter, String topic, String message) com.ibm.db2.jcc.am.eo: The value of a host variable in the EXECUTE or OPEN statement is out of range for its corresponding use.. SQLCODE=-302, SQLSTATE=22001, DRIVER=3.57.110

于 2013-03-30T08:56:13.153 回答