【发布时间】:2016-06-27 03:48:58
【问题描述】:
我有一个带有表salesman 的sqlite 数据库,具有以下属性:
----------------------
|code|name|isSelected|
----------------------
默认情况下,每个条目在isSelected 属性下都有0。逻辑是用户在 JCombobox 中按名称选择销售员。选择后,isSelected 属性下选定的销售员中的0 应为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";
并且,使用 SQLite 的 DB Browser 检查数据库中的更新,我看到所有 0 条目都更新为 1,这表明代码正在运行,但不是我想要的(基于 1 名选定的推销员)。但是在应用新代码(更新,如上所示)后,数据库中没有进行任何更改。有什么帮助吗?使用更新后的代码,NetBeans 控制台没有问题,一切都很顺利,除了实际更新
编辑:这一行解决了所有问题(感谢下面的评论):
String updateQuery = "UPDATE SALESMAN SET isSelected = '1' WHERE name = '" + selection + "'";
【问题讨论】:
-
您错误地应用了参数:String updateQuery = "UPDATE SALESMAN SET isSelected = '1' WHERE name = '" + selection + "'";您不能将名为 selection 的变量应用为文字字符串。
-
@DevilsHnd brooo 你的台词解决了一切,谢谢!!
标签: java sqlite sql-update