簡體   English   中英

使用自動生成的密鑰從JDBC Derby數據庫中刪除(始終以IDEGER身份生成始終為INTEGER NOT NULL(以1開頭,以1遞增))

[英]Delete from JDBC Derby Database using the auto-generated key (INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1))

只是想知道我在這里做錯了什么以及如何解決。 我有一個這樣創建的簡單表:

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();

該表存儲“項目”對象的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);
      }

}

這確實刪除了該項目,但它不會更新整數ID,並非始終生成null等。

例如,如果我的數據庫如下所示:

ID 1 | Blob Data
ID 2 | Blob Data

我調用了deleteItem(int ID)方法並在int 1(即刪除ID 1)中進行了解析,數據庫如下所示:

ID 2 | Blob Data

基本上,問題是,如何“更新”密鑰?

您在這里想要的東西讓我有些困惑。

您是在說刪除1時,由於ID 1消失了,您希望ID 2更新為使用ID 1嗎?

如果是這樣,那不是它的工作方式,那將是極其低效和復雜的。 您可能有200個引用該ID = 2的表,所有這些表都需要級聯更新才能將其重命名為1,這也將使數據庫使用者感到困惑。

您也許可以控制是否重復使用最低的可用ID,而不是從最高的ID開始繼續使用,但這是數據庫特定的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM