2011-04-07 100 views
0

我正在爲我的Android應用程序(Java)使用SQLite製作本地高分表。SQLite Android問題

出於某種原因,應用程序崩潰時嘗試向表中添加新的高分。下面是相關代碼:

private static String HIGHSCORES_TABLE_NAME = "SCORES_TABLE"; 
private SQLiteDatabase highScoresDB = null; 
private Cursor cursor = null; 

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 

    try 
    { 
     highScoresDB = openOrCreateDatabase("ScoresDatabase", MODE_PRIVATE, null); 
     createTable(); 
     lookupData(); 
    } 
    catch (SQLiteException se) 
    { 
     Log.e(getClass().getSimpleName(), "Could not create or Open the database"); 
    } 
    finally 
    { 

     if (highScoresDB != null) 
          highScoresDB.execSQL("DELETE FROM " + HIGHSCORES_TABLE_NAME); 
     highScoresDB.close(); 
    } 
} 

private void createTable() { 
    highScoresDB.execSQL("CREATE TABLE IF NOT EXISTS " + HIGHSCORES_TABLE_NAME + " (SCORE INT(3));"); 
} 

private void insertData() { 
    highScoresDB.execSQL("INSERT INTO " + HIGHSCORES_TABLE_NAME + " Values ("+ highscore +");"); 
} 

private void lookupData() { 
    cursor = highScoresDB.rawQuery("SELECT SCORE FROM " + HIGHSCORES_TABLE_NAME, null); 
    if (cursor.moveToLast()) { 
     highscore = cursor.getInt(cursor.getColumnIndex("SCORE")); 
    } 
    cursor.close(); 
} 

public void restart() { 
    insertData(); 
} 

當我看到了高分,我只希望最近的一次,所以我用moveToLast()。

+0

什麼是確切的例外,你會得到什麼線? – 2011-04-08 05:11:58

+0

我不明白爲什麼你正在執行SQL語句時,數據庫有功能,可以添加,刪除和修改... – JoxTraex 2011-05-05 18:07:44

回答

1

我發現「cursor.moveToLast()」似乎不能正常工作。它會移動遊標中的位置,但在您嘗試讀取該記錄時會引發異常。

這工作:

cursor.moveToPosition(cursor.getCount() - 1)

0

什麼是導致它崩潰的異常,你什麼時候插入一個新行?在插入一行之前是否打開數據庫,因爲在create方法的finally塊中調用了Close()。

如果這是您要存儲在數據庫中的唯一信息,請考慮使用共享首選項。 此鏈接演示瞭如何使用它 - Shared preferences demo