0

我在 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);
        }
4

4 回答 4

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 也可能使您的代码更简洁(更安全)。

于 2012-06-03T14:30:29.277 回答
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 + "";
于 2012-06-03T05:48:25.797 回答
0

对于您收到的参数太少错误 - 仔细检查查询中的字段名称。

于 2012-06-03T16:57:00.583 回答
0

我假设pricequantity列是整数,因此您不需要引用它们。

试试下面的sql:

String sql = "Update table1 set price =" + txtPrice.getText() + ",
              quantity=" + txtQuantity.getText() + ", description='" +
              txtDescription.getText() + "' where id= " + txtid.getText() + "";

请注意,价格和数量中缺少单引号

于 2012-06-03T05:43:44.397 回答