我已经在ms访问中创建了一个表。我已在MS-access中将ID的数据类型设置为自动编号。在java中我尝试更新记录。 netBeans IDE给出了“条件表达式中数据类型不匹配”的错误。 但是,当我更改了表中没有的ID号时,它运行良好。代码如下。
String sql = "Update table1 set price ='" + txtPrice.getText() + "', quantity='" + txtQuantity.getText() + "', description='" + txtDescription.getText() + "' where id= " + txtid.getText() + "";
try {
pst = conn.prepareStatement(sql);
pst.executeUpdate();
JOptionPane.showMessageDialog(null, "Updated");
UpdateJTable();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
答案 0 :(得分:1)
我认为你也可能会混淆常规的Statement和PreparedStatement对象。 PreparedStatement让您有机会使用占位符(您可能会在很多sql语句中看到)并让PreparedStatement为您做更多的工作。
尝试编写你的sql语句:
update table1 set price = ?, quantity = ?, description = ? where id = ?
然后使用PreparedStatement对象,您可以:
pStmt.setInteger(1, Integer.valueOf(txtPrice.getText())
每个参数。我直接使用PreparedStatement已经有几年了,但是如果内存服务,参数是从1开始的。
但你的基本问题是铸造。它还可以使您的代码更清晰(更安全),为此使用PreparedStatement。
答案 1 :(得分:0)
我假设price
和quantity
列是整数,因此您不需要引用它们。
尝试以下sql:
String sql = "Update table1 set price =" + txtPrice.getText() + ",
quantity=" + txtQuantity.getText() + ", description='" +
txtDescription.getText() + "' where id= " + txtid.getText() + "";
请注意,价格和数量中缺少单引号
答案 2 :(得分:0)
首先尝试在id字段中使用类型转换。像:
int id = Integer.parseInt(txtid.getText());
然后执行查询:
String sql = "Update table1 set price ='" + txtPrice.getText() + "', quantity='" +
txtQuantity.getText() + "', description='" + txtDescription.getText() + "'
where id= " + id + "";
答案 3 :(得分:0)
对于您获得的参数太少 - 请仔细检查查询中的字段名称。