2013-11-18 4 views
0

У меня возникла проблема с созданием базы данных SQLite. Программа работает нормально, пока я не попытаюсь получить доступ к базе данных в Activity, когда она сработает. Я подозреваю, что что-то не так с кодом, который создает таблицы, но я не могу найти ошибку.SQLite databe не создает таблицу

Просмотр LogCat моего устройства при попытке добавить данные в базу данных, я вижу эти записи:

table scoretable has no column named persons_score и

Error inserting persons_score=10 persons_name=me и

blablaSQLiteException: table scoretable has no column named persons_score (code 1): , while compiling: INSERT INTO scoretable (persons_score,persons_name) VALUES (?,?)

Вот код:

HighScore: (базы данных е класс)

public class HighScore { 

    public static final String KEY_ROWID = "_id"; 
    public static final String KEY_NAME = "persons_name"; 
    public static final String KEY_SCORE = "persons_score"; 

    private static final String DATABASE_NAME = "highscoredb"; 
    private static final String DATABASE_TABLE = "scoretable"; 
    private static final int DATABASE_VERSION = 1; 

    private DbHelper ourHelper; 
    private final Context ourContext; 
    private SQLiteDatabase ourDatabase; 

    private static class DbHelper extends SQLiteOpenHelper{ 

     public DbHelper(Context context){ 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db){ 



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

     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ 

      db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
      onCreate(db); 
     } 

    } 

    public HighScore(Context c){ 
     ourContext = c; 
    } 

    public HighScore open(){ 


     ourHelper = new DbHelper(ourContext); 
     ourDatabase = ourHelper.getWritableDatabase(); 
     return this; 
    } 

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

    public long createEntry(String name, String resultat){ 

     ContentValues cv = new ContentValues(); 
     cv.put(KEY_NAME, name); 
     cv.put(KEY_SCORE, resultat); 
     return ourDatabase.insert(DATABASE_TABLE, null, cv); 

    } 

    public String getData(){ 
     String[] columns = new String[]{ KEY_ROWID, KEY_NAME, KEY_SCORE}; 
     Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null); 
     String result = ""; 

     int iRow = c.getColumnIndex(KEY_ROWID); 
     int iName = c.getColumnIndex(KEY_NAME); 
     int iScore = c.getColumnIndex(KEY_SCORE); 

     for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){ 
      result = result + c.getString(iRow) + " " + c.getString(iName) + " " + c.getString(iScore) + "\n"; 
     } 
     return result; 
    } 

} 

Results.java (где пользователь может видеть свой счет и выбрать, чтобы добавить его в базу данных, при нажатии на кнопку viewHighscore сбои приложения.)

public class Resultat extends Activity implements View.OnClickListener { 

    Button addHighScore, viewHighScore; 
    TextView dittResultat; 
    int resultat; 
    String name; 
    String stringResultat; 

    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.resultat); 

     addHighScore = (Button) findViewById(R.id.addhighscore); 
     viewHighScore = (Button) findViewById(R.id.viewhighscore); 
     dittResultat = (TextView) findViewById(R.id.dittresultat); 

     addHighScore.setOnClickListener(this); 
     viewHighScore.setOnClickListener(this); 


     Globals g = (Globals)getApplication(); 
     resultat = g.getData(); 
     String name = ((Globals) this.getApplication()).getTypedName(); 


     dittResultat.setText("Gratulerer " + name + " , du har gjennomført quizen og fikk" + resultat + " av 10 riktige!"); 
    } 

    public void onClick(View arg0){ 

     switch (arg0.getId()){ 

      case R.id.addhighscore: 

       boolean didItWork = true; 
       try{ 
       Globals g = (Globals)getApplication(); 
       name = ((Globals) this.getApplication()).getTypedName(); 
       resultat = g.getData(); 
       stringResultat = Integer.toString(resultat); 


       HighScore entry = new HighScore(Resultat.this); 
       entry.open(); 
       entry.createEntry(name, stringResultat); 
       entry.close(); 

       }catch (Exception e){ 
        didItWork = false; 
        String error = e.toString(); 
        Dialog d = new Dialog(this); 
        d.setTitle("NEI!"); 
        TextView tv = new TextView(this); 
        tv.setText(error); 
        d.setContentView(tv); 
        d.show(); 
       } finally{ 
        if(didItWork){ 
         Dialog d = new Dialog(this); 
         d.setTitle("Wee!"); 
         TextView tv = new TextView(this); 
         tv.setText("Det funka!"); 
         d.setContentView(tv); 
         d.show(); 
        } 
       } 

       break; 

      case R.id.viewhighscore: 

       Intent myIntent2 = new Intent(Resultat.this, HighScoreView.class); 

       startActivity(myIntent2); 

       break; 

     } 
    } 


} 

List.java (простое текстовое представление, которое пытается отобразить результаты запроса к базе данных, открытие этого класса приводит к сбою приложения).

public class HighScoreView extends Activity { 

    TextView liste; 

    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.highscoreview); 

     liste = (TextView)findViewById(R.id.liste); 

     HighScore hsListe = new HighScore(this); 
     hsListe.open(); 
     String data = hsListe.getData(); 
     hsListe.close(); 
     liste.setText(data); 


    } 

} 
+0

Опубликуйте свой файл журнала ошибок ... – Subburaj

ответ

0

Вы, вероятно, добавили столбец persons_score после того, как была создана ваша база данных. Просто сделайте четкие данные для своего приложения или удалите, а затем повторно запустите приложение.

Это должно исправить.

Надеюсь, что это поможет

+0

Спасибо тоже :) – user3004292

1

Недавно добавили несколько таблиц/столбцов? Попробуйте удалить приложение и снова установить его для повторного создания. База данных создается только один раз, поэтому код в onCreate не вызывается снова при обновлении вашего приложения.

+1

Святые курят, что исправили его lol! Я стучал головой в свой стол, как 5 часов ха-ха. Спасибо вам и Нилу! – user3004292

0

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

Точка - всякий раз, когда вы меняете схему базы данных, вам нужно изменить номер версии на нечто большее, чем предыдущее, в противном случае андроид не сможет обновить вашу базу данных, не выполнив операцию onUpgrade. поэтому, несмотря на то, что вы исправили, вам не удалось зарегистрировать изменения в базе данных.

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

+0

Спасибо за понимание :) – user3004292

Смежные вопросы