我有一个字符串的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();
}
这是无限循环。 有人可以帮我纠正我的代码吗?插入部分代码很好。但我没有得到个人网址。
谢谢!
答案 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.110