2013-10-11 57 views
-3

我得到我已经添加了屏幕截图图像中的错误消息,当我尝试更新数据库中的现有场会是什么问题java的mysql的更新语句错误

private void cmdUpdateMouseClicked(java.awt.event.MouseEvent evt) {          
    String sql="UPDATE std set ADM_NO=?,Form=?,Student=?,Parent=?,Contact=?"; 


    try { 
     ps=conn.prepareStatement(sql); 
       ps.setString(1, txtadm.getText()); 
       ps.setString(2, txtform.getText()); 
       ps.setString(3, txtsname.getText()); 
       ps.setString(4, txtpname.getText()); 
       ps.setString(5, txtmobileno.getText()); 


      ps.executeUpdate(); 

error screenshot

+4

你认为错误的含义是什么? –

+0

错误消息是非常明显的。您的数据库中有另一个主键相同的条目。 –

+0

'键'PRIMARY''的重复条目'sp13/21101/11' – Math

回答

0

它看起来那你试图用PRIMARY KEY来设置一个字段的值,这意味着它不能有重复的值,应该是唯一的。

+0

上做一些阅读即使我改变时也会发生同样的错误转换为表中不存在的值 –

-1

你好,没有“Where”子句太明显,文件上有一个唯一的键。

4

您错过了SQL中的WHERE子句,它会更新整个表。 为了更新它通常需要主键,例如WHERE primary_key_column=id

0

它看起来像你的代码试图在该表更新的每一行:

UPDATE std set ADM_NO=?,Form=?,Student=?,Parent=?,Contact=? 

您需要使用where子句的目标,你要更新的行。我猜ADM_NO是主键,并且查询试图更新所有行以具有相同的主键。

0

您正在尝试将表的主键更新为已存在的值。

当您更新时没有WHERE子句,这意味着您将更新应用于表上的所有行,并且不起作用,因为您将一次又一次将主键设置为相同的值。

找出你的主要关键。不知道你用什么工具来管理MySQL表,但你可以使用

SHOW COLUMNS FROM std 

我猜你的主键是ADM_NO

所以,你也许需要编写类似:

... 
String sql="UPDATE std set Form=?,Student=?,Parent=?,Contact=? WHERE ADM_NO=?"; 
... 
      ps.setString(1, txtform.getText()); 
      ps.setString(2, txtsname.getText()); 
      ps.setString(3, txtpname.getText()); 
      ps.setString(4, txtmobileno.getText()); 
      ps.setString(5, txtadm.getText()); 

刚一个猜测