我有一个带有表salesman
的sqlite数据库,其中包含以下属性:
----------------------
|code|name|isSelected|
----------------------
默认情况下,每个条目在0
属性下都有isSelected
。逻辑是用户在JCombobox中按名称选择推销员。选择后,0
属性下所选推销员中的isSelected
应为1
。
例如,给定Salesman
的数据输入:
----------------------
|code|name|isSelected|
----------------------
|0001|John|0 |
----------------------
然后,用户选择John
,因此,0
应该更新为1
。
这是我的更新代码:
public void updateSalesman(String selection){
String updateQuery = "UPDATE SALESMAN SET isSelected = '1' WHERE name = 'selection'"; //problem here
Connection connection = null;
PreparedStatement ps = null;
try{
connection = DBConnection.getConnection();
ps = connection.prepareStatement(updateQuery);
ps.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}
}
我有0
到1
的更新查询,但我不知道如何在方法中指明只根据用户的选择更新1个推销员。
编辑:将工作代码更改为:
public void updateSalesman(String selection){
String updateQuery = "UPDATE salesman SET isSelected = ? WHERE name = ? AND isSelected = ?";
Connection connection = null;
PreparedStatement ps = null;
try{
connection = DBConnection.getConnection();
ps = connection.prepareStatement(updateQuery);
ps.setInt(1, 1);
ps.setString(2, "selection");
ps.setInt(3, 0);
ps.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally {
if (ps != null) {
try {
ps.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
if (connection!= null) {
try {
connection.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}
最初,我使用这行代码来测试更新是否有效:
"UPDATE salesman SET isSelected = 1 WHERE isSelected = 0";
并且,使用DB Browser for DBite,检查数据库中的更新,我看到所有0
条目都更新为1
,这表明代码正在运行但不是我想要的是(基于1个选定的推销员)。但在应用新代码(更新,见上文)后,数据库中没有进行任何更改。有帮助吗?使用更新的代码,NetBeans控制台没有任何问题,除了实际更新外,一切都很顺利
编辑:这一行解决了这一切(感谢下面的评论):
String updateQuery = "UPDATE SALESMAN SET isSelected = '1' WHERE name = '" + selection + "'";
答案 0 :(得分:1)
String updateTableSQL = "UPDATE SALESMAN SET isSelected = ? WHERE name = ?";
PreparedStatement preparedStatement = dbConnection.prepareStatement(updateTableSQL);
preparedStatement.setInt(1, 1);
preparedStatement.setString(2, "selection");
// execute insert SQL stetement
preparedStatement .executeUpdate();