Java 在SQLiteDatabase中保存和检索计数器,并使用它保存唯一的文件名
我对Java比较陌生,希望使用计数器来保存每个使用唯一id拍摄的图像。通过将计数器变量保存到SQLite,我希望在重新启动应用程序时使用与关闭应用程序时相同的值再次检索它。现在的问题是计数器跳过数字(将文件名保存为0、1、3、5等)。当我退出并再次启动应用程序时,它将从0重新启动 在MosidaDb.java中创建、写入和读取Java 在SQLiteDatabase中保存和检索计数器,并使用它保存唯一的文件名,java,android,sqlite,Java,Android,Sqlite,我对Java比较陌生,希望使用计数器来保存每个使用唯一id拍摄的图像。通过将计数器变量保存到SQLite,我希望在重新启动应用程序时使用与关闭应用程序时相同的值再次检索它。现在的问题是计数器跳过数字(将文件名保存为0、1、3、5等)。当我退出并再次启动应用程序时,它将从0重新启动 在MosidaDb.java中创建、写入和读取 @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generate
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
KEY_PHOTOID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
KEY_PHOTOPATH + " TEXT NOT NULL, " +
KEY_LOCATION + " TEXT, " +
KEY_AUDIOPATH + " TEXT, " +
KEY_DESCRIPTION + " TEXT);");
db.execSQL("CREATE TABLE " + DATABASE_TABLE2 + " (" +
KEY_PHOTONAME + " INTEGER NOT NULL, " +
KEY_AUDIONAME + " INTEGER NOT NULL);");
}
public long dbEntry2(int photoname) {
ContentValues cv2 = new ContentValues();
cv2.put(KEY_PHOTONAME, photoname);
return myDatabase.insert(DATABASE_TABLE2, null, cv2);
}
public int getPhotoid() {
Cursor c = myDatabase.rawQuery("SELECT * FROM NameTable", null);
int iQuery = c.getColumnIndex(KEY_PHOTONAME);
int result = 0;
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
result = result + c.getInt(iQuery);
}
return result;
}
你觉得这些方法有什么不对吗?计数器变量被传递到dbEntry2,并由getPhotoid()检索。或者这至少是我想要它做的。如果在开始时:
database.beginTransaction();
然后,您必须在应用程序退出之前调用此函数:
myDatabase.setTransactionSuccessful();
myDatabase.endTransaction();
这将提交您的更改
完成后,还应始终关闭光标:
c.close();
我不知道为什么计数器会跳过,检查您的数据库内容。您现在得到的文件名不是0、1、3、6、10、…?1、3、5、7、9吗。因此,计数器似乎运行了两次。然而,最大的问题是,当我重新启动应用程序时,计数器会重置。非常感谢!柜台漏了,因为我把它放错地方了。成功了