使用自动生成的密钥从JDBC Derby数据库中删除(INTEGER NOT NULL一直生成为IDENTITY(START WITH 1,INCREMENT BY 1))

时间:2014-08-18 17:17:51

标签: java jdbc derby

只是想知道我在这里做错了什么以及如何解决它。我有一个简单的表创建如下:

String createTableSQL = (
        "CREATE TABLE ITEM_OBJECT_TABLE ("
        + "ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),"
        + "Item_Object blob)");
         PreparedStatement ps = connection.prepareStatement(createTableSQL);
         ps.execute();

该表存储一个“item”对象的blob

反正。我的删除方法如下:

public void deleteItem(int i)
{
    Debug.write("Attempting to delete item ID: "+i);
    try
      {
        PreparedStatement deleteStatement = databaseConnector.prepareStatement("DELETE FROM Item_Object_Table WHERE ID=?");
        deleteStatement.setInt(1, i);
        deleteStatement.execute();
      } catch (SQLException ex)
      {
        Logger.getLogger(DatabaseControl.class.getName()).log(Level.SEVERE, null, ex);
      }

}

此DOES删除该项但不更新整数ID,而不是始终生成等等。

例如,如果我的数据库看起来像这样:

ID 1 | Blob Data
ID 2 | Blob Data

我调用了deleteItem(int ID)方法并在int 1中解析(即删除ID 1),数据库将如下所示:

ID 2 | Blob Data

问题基本上是,如何“更新”密钥?

1 个答案:

答案 0 :(得分:1)

我对你想要的东西感到有点困惑。

你是说当你删除1时,你希望ID 2被更新为使用ID 1,因为ID 1已经消失了吗?

如果是这样,那不是它的工作方式,那将是非常低效和复杂的。您可能有200个表引用该ID = 2,这些表都需要级联更新才能将其重命名为1,这对于DB消费者来说也会让人感到困惑。

您可以控制是否重复使用最低可用ID,而不是继续使用最高ID,但这是一个特定于DB的问题。