我正在使用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)
如果需要更多信息或代码来了解问题所在,请发表评论。
答案 0 :(得分:0)
错误本身就是描述性的。 PRYMARY KEY必须是唯一的。
检查数据库中是否存在您要更新的房间。
由于设置列的默认值,如果插入语句中未提供该值,则会添加该值。
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表示该字段未填充空格。