gpt4 book ai didi

java.sql.SQLException : No value specified for parameter 2 , 使用 JDBC 将 arraylist 插入数据库

转载 作者:行者123 更新时间:2023-12-01 18:15:28 25 4
gpt4 key购买 nike

我正在使用 jsoup 从网站提取一些数据并将其存储到数组列表中。现在我想将数据存储到mysql数据库中。这是我的代码,但我得到了这个 java.sql.SQLException: No value specified forparameter 2

这是我从网站获取数据的类(class)。

public class Twrapper {

ArrayList<MobilePhone> skrouztPhones = new ArrayList<>();

protected ArrayList<MobilePhone> getPhoneNames() throws IOException{

for (int j=1; j<=1;j++){
Document mobilePhones = Jsoup.connect("http://www.skroutz.gr/c/40/kinhta-thlefwna.html?order_dir=asc&page=" + j).userAgent("Mozilla").get();
Elements phoneName = mobilePhones.select("div[class=details]");
for(int i = 1; i<phoneName.size();i++){
MobilePhone names = new MobilePhone();
names.setName(phoneName.get(i).text());
skrouztPhones.add(names);
}
}
return skrouztPhones;
}

protected ArrayList<MobilePhone> getPhonesUrls() throws IOException{

for(int j =1; j<=1;j++){
Document mobilePhone = Jsoup.connect("http://www.skroutz.gr/c/40/kinhta-thlefwna.html?order_dir=asc&page=" + j).userAgent("Mozilla").get();
Elements phoneUrls = mobilePhone.select("div[class=details] a ");
for(int i =0; i<phoneUrls.size(); i++){
MobilePhone urls = new MobilePhone();
urls.setUrl(phoneUrls.get(i).absUrl("href"));
skrouztPhones.add(urls);
}
}
return skrouztPhones;
}
}

这是我将数据存储到数据库的方法。

public static  void main(String[] args) throws  IOException, SQLException{
Twrapper wrapper = new Twrapper();


try
{
// create a mysql database connection
String myDriver = "org.gjt.mm.mysql.Driver";
String myUrl = "jdbc:mysql://83.212.124.175:3306/zadmin_java?useUnicode=yes&characterEncoding=UTF-8";
Class.forName(myDriver);
System.out.println("Connecting to a selected database...");
Connection conn = DriverManager.getConnection(myUrl, "usr", "pass");
System.out.println("Connected database successfully...");

// the mysql insert statement
String query = " INSERT INTO skrouzt(url,name)"
+ " values (?, ?)";
PreparedStatement updateSkrouztPs = conn.prepareStatement(query);
//use the wrapper methos to insert to db


ArrayList<MobilePhone> skroutzPhonesUrls = wrapper.getPhonesUrls();
for(MobilePhone phone: skroutzPhonesUrls){
String urls = phone.getUrl();
updateSkrouztPs.setString(1, urls);
updateSkrouztPs.executeUpdate();
}
ArrayList<MobilePhone> skrouztPhonesNames = wrapper.getPhoneNames();
for(MobilePhone phone: skrouztPhonesNames){
String names = phone.getName();
updateSkrouztPs.setString(2, names);
updateSkrouztPs.executeUpdate();
}







//close the connection
conn.close();
System.out.println("Done!!");
}
catch(SQLException se){
//Handle errors for JDBC
se.printStackTrace();
}
catch (Exception e)
{
System.err.println("Got an exception!");
System.err.println(e.getMessage());

}
}

最佳答案

您的准备​​好的语句需要先设置两个字符串,然后才能调用executeUpdate。在每个循环中,您尝试设置 1,然后运行更新,这意味着 jdbc 最终会得到如下 sql 语句

INSERT INTO skrouzt(url,name) values ('your url',)

如果没有设置第二个值,则该语句无效。如果这些 url 和名称相互匹配,您应该通过一个循环成对插入数据。

按要求提供示例。请注意,这仅在列表长度相同的情况下才有效,但如果它们的长度不同,则需要以不同的方式设计数据库,以免它们成为同一个表中的两列。

for (int x = 0; x < skroutzPhonesUrls.size(); x++)
{
updateSkrouztPs.setString(1, skroutzPhonesUrls.get(x).getUrl());
updateSkrouztPs.setString(2, skrouztPhonesNames.get(x).getName());
updateSkrouztPs.executeUpdate();
}

关于java.sql.SQLException : No value specified for parameter 2 , 使用 JDBC 将 arraylist 插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29857216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com