Mit*_*ell 5 java sql jdbc arraylist
无法从ArrayList向我的数据库插入新值; 我想将所有ArrayList添加到DB列列表,标题,关于来自ArrayLists的值.pars.getListId(),getTitleId(),pars.getAboutAr().
String query = "insert into test (list, title, about)" + "VALUES (?, ?, ?)";
try {
pars.htmlParse("hello");
PreparedStatement preparedStmt = db.getConnection().prepareStatement(query);
for (int i = 0; i < pars.getListId().size(); i++) {
preparedStmt.setString(1, pars.getListId().get(i));
preparedStmt.executeUpdate();
}
for (int i = 0; i < pars.getTitleId().size(); i++) {
preparedStmt.setString(2, pars.getTitleId().get(i));
preparedStmt.executeUpdate();
}
for (int i = 0; i < pars.getAboutAr().size(); i++) {
preparedStmt.setString(3, pars.getAboutAr().get(i));
preparedStmt.executeUpdate();
}
preparedStmt.execute();
} catch (IOException e1) {
e1.printStackTrace();
Run Code Online (Sandbox Code Playgroud)
executeUpdate在调用一次之前,您必须设置所有三列。
你正在做:
preparedStmt.setString(1, pars.getListId().get(i));
preparedStmt.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
因此,您只需在准备好的语句中设置第一个参数,然后调用executeUpdate. 但你需要同时拥有这三个。
您应该有一个将所有三个插入在一起的循环:
for (int i = 0; i < pars.getListId().size(); i++) {
preparedStmt.setString(1, pars.getListId().get(i));
preparedStmt.setString(2, pars.getTitleId().get(i));
preparedStmt.setString(3, pars.getAboutAr().get(i));
preparedStmt.executeUpdate();
}
Run Code Online (Sandbox Code Playgroud)
这会在执行语句之前设置语句中的所有三列。因此,您将获得包含所有值集的正确插入语句。
pars.getListId()这里的一个问题是,例如,可能会出现5 个项目,而pars.getTitleId()和pars.getAboutAr()有 4 个项目。然后,当您运行上面的循环时,当i到达该值时4,您将得到一个异常,因为pars.getTitleId()没有值 4(因为它只有 4 个项目)。
这可以有多种解决方案。
您只能插入最短列表之前的值。您可以进行这样的计算:
int minSize = Collections.min( Arrays.asList( pars.getListId().size(),
pars.getTitleId().size(),
pars.getAboutAr().size() ) );
Run Code Online (Sandbox Code Playgroud)
然后使用
for (int i = 0; i < minSize; i++) {
preparedStmt.setString(1, pars.getListId().get(i));
preparedStmt.setString(2, pars.getTitleId().get(i));
preparedStmt.setString(3, pars.getAboutAr().get(i));
preparedStmt.executeUpdate();
}
Run Code Online (Sandbox Code Playgroud)
然后它会给你与最短列表一样多的行。
您可以使用最长的列表(在上面的计算中使用max代替min)并为缺失值设置空值(即检查列表是否短于i要求。如果是,请使用setNull而不是setString.
pars像您那样构建三个单独的列表。相反,我会创建一个类,可能是命名的Par或任何有意义的类,它具有和id字段。然后我会在我的列表中创建一个对象列表,而不是三个单独的列表。这样就不会出现长度不同的问题,并且数据结构将更像数据库中的结构。titleaboutParpars| 归档时间: |
|
| 查看次数: |
1126 次 |
| 最近记录: |