只是想知道我在这里做错了什么以及如何解决它。我有一个简单的表创建如下:
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
问题基本上是,如何“更新”密钥?
答案 0 :(得分:1)
我对你想要的东西感到有点困惑。
你是说当你删除1时,你希望ID 2被更新为使用ID 1,因为ID 1已经消失了吗?
如果是这样,那不是它的工作方式,那将是非常低效和复杂的。您可能有200个表引用该ID = 2,这些表都需要级联更新才能将其重命名为1,这对于DB消费者来说也会让人感到困惑。
您可以控制是否重复使用最低可用ID,而不是继续使用最高ID,但这是一个特定于DB的问题。