gpt4 book ai didi

java - 如何在Android SQLite数据库中创建序列号而不是ROWID?

转载 作者:行者123 更新时间:2023-12-01 14:13:14 24 4
gpt4 key购买 nike

我正在开发一个包含 Android SQLite 数据库的应用程序。我在此数据库中添加和删除行。当我删除行时,它基于 ROWID。但我发现,尽管我删除了该行,但 ROWID 仍然存在。例如,如果我的数据库中有 3 行并删除第 2 行,则我的第三行不会更改为 2,它仍然是 3。然后,如果我添加一行,它将是 4。

所以我的问题是,当我删除一行并添加新行时,如何做到这一点,那么添加的行数将等于删除的行。因此,例如,如果我删除第一行,数据库将在其他行 1,2,3... 旁边显示我,而不是 2,3,4...

抱歉,也许有点复杂,但我希望它有意义。

这是我的代码:

public HotOrNot open() throws SQLException{
ourHelper = new DbHelper(ourContext);
ourDatabase = ourHelper.getWritableDatabase();
return this;
}
public void close(){
ourHelper.close();
}

public long createEntry(String name, String hotness) {
// TODO Auto-generated method stub
ContentValues cv = new ContentValues();
cv.put(KEY_NAME, name);
cv.put(KEY_HOTNESS, hotness);
return ourDatabase.insert(DATABASE_TABLE, null, cv);
}

public String getData() {
// TODO Auto-generated method stub
String[] columns = new String[]{ KEY_ROWID, KEY_NAME, KEY_HOTNESS};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
String result = "";

int iRow = c.getColumnIndex(KEY_ROWID);
int iName = c.getColumnIndex(KEY_NAME);
int iHotness = c.getColumnIndex(KEY_HOTNESS);

for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
result = result + c.getString(iRow) + " " + c.getString(iName) + " " + c.getString(iHotness) + "\n";
}
return result;
}

public String getName(long l) throws SQLException{
// TODO Auto-generated method stub
String[] columns = new String[]{ KEY_ROWID, KEY_NAME, KEY_HOTNESS};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" + l, null, null, null, null);
if(c != null){
c.moveToFirst();
String name = c.getString(1);
return name;
}
return null;
}

public String getHotness(long l) throws SQLException{
// TODO Auto-generated method stub
String[] columns = new String[]{ KEY_ROWID, KEY_NAME, KEY_HOTNESS};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" + l, null, null, null, null);
if(c != null){
c.moveToFirst();
String hotness = c.getString(2);
return hotness;
}
return null;
}

public void updateEntry(long lRow, String mName, String mHotness) throws SQLException{
// TODO Auto-generated method stub
ContentValues cvUpdate = new ContentValues();
cvUpdate.put(KEY_NAME, mName);
cvUpdate.put(KEY_HOTNESS, mHotness);
ourDatabase.update(DATABASE_TABLE, cvUpdate, KEY_ROWID + "=" + lRow, null);
}

public void deleteEntry(long lRow1) throws SQLException{
// TODO Auto-generated method stub
ourDatabase.delete(DATABASE_TABLE, KEY_ROWID + "=" + lRow1, null);
}
}

我知道不能使用 ROWID 来完成,因为它对于每一行都是唯一的。你能写一下如何解决这个问题的代码吗,因为我是Android和SQLite的初学者。

提前致谢

最佳答案

SQLite keeps track of the largest ROWID that a table has ever held using the special SQLITE_SEQUENCE table.

您可以更新 SQLITE_SEQUENCE 表-

UPDATE SQLITE_SEQUENCE SET seq = <n> WHERE name = <table_name>

n 是 rowid - 1

Similar question.

关于java - 如何在Android SQLite数据库中创建序列号而不是ROWID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18319074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com