![](/img/trans.png)
[英]spring roo - using own id instead of auto-generated key in mysql database
[英]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.