调用update方法时,PRIMARY KEY必须是唯一的异常

时间:2014-11-25 15:51:27

标签: java sqlite

我正在使用java和SQLite编写基于GUI的项目。我在我的SQLite数据库中创建了一个表,并在我的项目中使用它。有几列我将RoomNo作为主键,并给出了默认值111。 问题是当我尝试编辑或更新你从jTable中说的数据并将其保存到我的数据库时它显示异常,java.sql.SQLException:PRYMARY KEY必须是唯一的。 我无法找到它出现的原因。可能问题出在我的代码中。这是代码f更新方法。请尽力帮我解决这个问题。

private void updateButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
    // TODO add your handling code here:
    try{
        String value1 = roomNumbertf.getText();
        String value2 = detailtf.getText();
        String value3 = statustf.getText();
        String value4 = billPerDaytf.getText();
        String value5 = clientNametf.getText();
        String value6 = clientAddresstf.getText();
        String value7 = clientMobileNotf.getText();
        String value8 = entryDatetf.getText();
        String value9 = leavingDatetf.getText();

        String sql = "update RoomStatusTable2 set RoomNo='"+value1+"', Details= '"+value2+"', Status='"+value3+"', BillPerDay='"+value4+"',ClientName='"+value5+"', ClientAddress='"+value6+"', ContactNo='"+value7+"', EntryDate='"+value8+"', LeavingDate='"+value9+"'";
        pstatement = connection.prepareStatement(sql);
        pstatement.execute();
        JOptionPane.showMessageDialog(null, "Information Updated");
        updateTable();
    }catch(Exception e){
        JOptionPane.showMessageDialog(null, e);
    }
}

//这是我的SQLite表crate语句     CREATE TABLE" RoomStatusTable2" (" RoomNo" INTEGER PRIMARY KEY DEFAULT     (111),"细节" CHAR,"状态" CHAR," BillPerDay"     CHAR," AdvancedBooking" CHAR," CLIENTNAME" CHAR," ClientAddress"     CHAR," ContactNo" CHAR," EntryDate" CHAR," LeavingDate" CHAR)

如果需要更多信息或代码来了解问题所在,请发表评论。

2 个答案:

答案 0 :(得分:0)

错误本身就是描述性的。 PRYMARY KEY必须是唯一的。

  1. 检查数据库中是否存在您要更新的房间。

  2. 由于设置列的默认值,如果插入语句中未提供该值,则会添加该值。

  3. 3.您可以通过打印其值来检查房间没有值,如果它等于111或表中已有的任何其他值,则应提供不同的值。

答案 1 :(得分:0)

UPDATE可能应该以{{1​​}}结尾。 您的更新会将所有记录设置为具有相同的RoomNo。

WHERE RoomNo = ...

同样最好制作字符串字段String sql = "update RoomStatusTable2 set Details=?, Status=?, BillPerDay=?, " + "ClientName=?, ClientAddress=?, ContactNo=?, EntryDate=?, " + "LeavingDate=? " + "where RoomNo = ?"; try (PreparedStateent pstatement = connection.prepareStatement(sql)) { pstatement.setString(1, value2); pstatement.setString(2, value3); pstatement.setString(3, value4); pstatement.setString(4, value5); pstatement.setString(5, value6); pstatement.setString(6, value7); pstatement.setString(7, value8); pstatement.setString(8, value9); pstatement.setInt(9, Integer.parseInt(value1)); pstatement.executeUpdate(); } // Closes pstatement. 等,VAR表示该字段未填充空格。