2014-05-07 5 views
0

Здравствуйте, я новичок в базе данных для Android и SQLite. Проблема, с которой я сталкиваюсь, - это когда я пытаюсь вставить счет в базу данных, даже не пытаюсь. Код продолжает работать как обычно без вставки.Android: SQLite insert, no попытка

Моя таблица базы данных Является буквально идентификатором первичного ключа и поле оценки, которое является целым числом.

Я не совсем уверен, какой код вам нужно будет видеть, чтобы определить мою проблему, но вот моя оценка. Извиняюсь, если я ошибаюсь, я постараюсь помочь в любом случае. Спасибо за ваше время.

Класс DBAdaptor.

//Primary Key for the score 
    public static final String KEY_ROWID = "id"; 
    //Field for user score 
    public static final String KEY_SCORE = "score"; 

    //Database name 
    private static final String DATABASE_NAME = "SportsQuiz"; 
    //Database table name 
    private static final String DATABASE_TABLE = "score"; 
    //Database version 
    private static final int DATABASE_VERSION = 1; 

    private dbHelper dbHelper; 
    private final Context context; 
    private SQLiteDatabase sqlDB; 

    private static class dbHelper extends SQLiteOpenHelper 
    { 
     //Constructor for dbHelper 
     public dbHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
      // TODO Auto-generated constructor stub 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      // TODO Auto-generated method stub 
      db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + 
      KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      KEY_SCORE + "INTEGER NOT NULL;)"); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      // TODO Auto-generated method stub 
      db.execSQL("DROP TABLE IF EXISTS" + DATABASE_TABLE); 
      onCreate(db); 
     } 


    } 

    public Adapter(Context c) 
    { 
     context = c; 
    } 

    public Adapter open() throws SQLException 
    { 
     dbHelper = new dbHelper(context); 
     sqlDB = dbHelper.getWritableDatabase(); 
     return this; 
    } 

    public void close() 
    { 
     dbHelper.close(); 
    } 

    public long createEntry(int score) { 
     // TODO Auto-generated method stub 
     ContentValues cv = new ContentValues(); 
     cv.put(KEY_SCORE, score); 
     return sqlDB.insert(DATABASE_TABLE, null, cv); 
    } 

В классе игры я хочу отобразить диалоговое окно, если вставка прошла успешно. Оценка - это переменная int.

boolean working = true; 
        try{ 
         Adapter entry = new Adapter(Game.this); 
         entry.open(); 
         entry.createEntry(score); 

         entry.close(); 
        }catch (Exception e) 
        { 
         working = false; 
        } 
        finally 
        { 
         if (working == true) 
         { 
          Dialog d = new Dialog(Game.this); 
          d.setTitle("Woo!"); 
          TextView tv = new TextView(Game.this); 
          tv.setText("Woo"); 
          d.setContentView(tv); 
          d.show(); 
         } 
        } 
+0

Вы проглотили свое исключение, если оно есть. напечатайте stacktrace в своем игровом классе и посмотрите, что он говорит, если есть какие-то, а не хорошая практика. (в строке, где work = false;) – Jimmy

+0

Это было просто посмотреть, вставлено ли это, и все, идите и попробуйте printTrace и посмотрите, что он возвращает. – Seatter

+0

@Jimmy Отпечаток printStackTrace() возвращен. – Seatter

ответ

2

Там есть пространство отсутствует между KEY_SCORE и его типом в вашем создании базы данных SQL. Также ; в конце неуместен. Перейдите на:

db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + 
     KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
     KEY_SCORE + " INTEGER NOT NULL);"); 

После того, как вы установили его, удалите приложение, чтобы база данных воссоздана. У вашего onUpgrade() также есть проблемы с синтаксисом, поэтому неплохо просто обновить версию базы данных.

Это также хорошая привычка регистрировать исключения, чтобы узнать, что не так с кодом. Компьютеры обнаруживают проблемы синтаксиса намного лучше, чем люди.

+0

Он по-прежнему пропускает запись entry.createEntry (оценка); line в режиме отладки. Должен ли я делать что-то особенное для базы данных после того, как я вставил это пространство. Я изменил номер версии, но я понятия не имею, действительно ли это что-то сделает. Спасибо, что заметили мою опечатку. – Seatter

+0

В вашем onUpgrade есть аналогичная ошибка. Просто удалите, чтобы удалить старый db. – laalto

+0

Так оно и есть, я, кажется, плохо для этого. Еще раз спасибо – Seatter