2011-10-06 71 views
1

我对Java相对较新,并且希望使用计数器来保存每个使用唯一ID拍摄的图像。通过将计数器变量保存为SQLite,我想在重新启动应用程序时使用与关闭时相同的值来重新检索它。现在的问题是计数器跳过数字(将文件名保存为0,1,3,5等)。当我退出并重新启动应用程序时,它将从0重新开始。保存并检索SQLiteDatabase中的计数器并使用它来保存唯一的文件名

OnCreate中,写,你看到什么错在这些方法中MosidaDb.java

@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()检索。或者这至少是我想要它做的。感谢

+0

获取的文件名不是0,1,3,6,10 ......? – Caner

+0

1,3,5,7,9现在。所以它似乎计数器运行两次。但最大的问题是,当我重新启动应用程序时,计数器会重置。 – user982476

回答

0

如果在开始时:

database.beginTransaction(); 

则必须在应用程序退出之前调用此:

myDatabase.setTransactionSuccessful(); 
myDatabase.endTransaction(); 

这应该提交更改。

,你也应该总是关闭你的光标,当您完成:

c.close(); 

我不知道为什么跳过柜台,检查数据库的内容。

+0

非常感谢!由于我错放了它,柜台被跳过了。明白了吧 – user982476

相关问题