SQLite Android Проблема - PullRequest
       4

SQLite Android Проблема

0 голосов
/ 07 апреля 2011

Я создаю локальную таблицу рекордов, используя SQLite для моего приложения для Android (Java).

По какой-то причине приложение вылетает при попытке добавить новый рекорд в таблицу.Вот соответствующий код:

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 ().

Ответы [ 3 ]

1 голос
/ 05 мая 2011

Я обнаружил, что "cursor.moveToLast ()", кажется, не работает правильно.Она перемещает позицию в курсоре, но выдает исключение при попытке прочитать эту запись.

Это работает:

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

0 голосов
/ 05 мая 2011

Вместо того, чтобы делать операторы, как вы, используйте некоторые из предоставленных методов, включенных в класс объектов SQLite:

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html

Это делает ваш код менее подверженным ошибкам SQLОпечатки или небольшие ошибки.

Также, пожалуйста, оставьте свой logcat.

0 голосов
/ 07 апреля 2011

Какое исключение вызывает сбой, когда вы вставляете новую строку? Открываете ли вы базу данных перед вставкой строки, так как метод Close () вызывается в блоке finally метода create.

Если это единственная информация, которую вы собираетесь хранить в базе данных, рассмотрите возможность использования общих настроек. У этой ссылки есть демонстрация того, как ее использовать - Демонстрация общих настроек

...