0
我的工作包含了Android的SQLite数据库的应用程序。我在这个数据库中添加和删除行。当我删除我的行时,它基于ROWID。但我发现,尽管我删除了该行,但ROWID仍然存在。因此,举例来说,如果我有我的数据库3行删除第二行,我的第三排都不会改变,以2仍然3.然后,如果我添加一行,这将是4如何在Android SQLite数据库中创建序列号但不是ROWID?
所以我的问题是,如何做到这一点,当我删除一行,并添加一个新的,然后添加的行的数量将等于删除的行。因此,举例来说,如果我删除的第一行,比数据库会告诉我旁边的其他行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中。
在此先感谢
这是可行的,但它也将是一个性能命中将增长与桌子。如果这个表有很多插入和删除,插入会随着表的增长而变慢。 –
@DaveSwersky也与他们的自动密钥生成算法中搞乱不是我想是一件好事。 –