2012-12-26 46 views
0

所以每次我輸入數據到位於我的AddContacts類的EditText字段中時,我的Dialog就說我已經成功添加了信息,但是在日誌貓中它說沒有這樣的表:contactsTable。我認爲錯誤是在我的數據庫類的onCreate和的onUpdate方法中,但我不知道該怎麼做SQL Android的錯誤:沒有這樣的表

代碼:

package com.example.myfirstapp; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 


public class DatabaseTable { 
private static final String TAG = "ContactsDatabase"; 

//The columns we'll include in the contacts table 
public static final String COL_ID = "ID"; 
public static final String COL_NAME = "NAME"; 
public static final String COL_EMAIL = "EMAIL"; 

private static final String DATABASE_NAME = "CONTACT"; 
private static final String DATABASE_TABLE = "contactsTable"; 
private static final int DATABASE_VERSION = 1; 
private Context ourContext; 
private DbHelper DBHelper; 
private SQLiteDatabase db; 
private static final String DATABASE_CREATE = 
     "CREATE TABLE " + DATABASE_TABLE + " (" + 
     COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
     COL_NAME + " TEXT NOT NULL, " + 
     COL_EMAIL + " TEXT NOT NULL);"; 

    private static class DbHelper extends SQLiteOpenHelper { 

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

     public void onCreate(SQLiteDatabase db) { 
      try { 
       db.execSQL(DATABASE_CREATE); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
    } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
      onCreate(db); 
     } 
    } 

     public DatabaseTable(Context context) { 
      ourContext = context; 
     } 

     public DatabaseTable open() throws SQLException { 
      DBHelper = new DbHelper(ourContext); 
      db = DBHelper.getWritableDatabase(); 
      return this; 
     } 

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

     public long insertContact(String name, String email) { 
      ContentValues initialValues = new ContentValues(); 
      initialValues.put(COL_NAME, name); 
      initialValues.put(COL_EMAIL, email); 
      return db.insert(DATABASE_TABLE, null, initialValues); 
     } 

     public void deleteRecord(long rowId) 
     { 
      db.delete(DATABASE_TABLE, COL_ID + "=" + rowId, null); 
     } 

     public Cursor getAllRecords() { 
      return db.query(DATABASE_TABLE, new String[] {COL_ID, COL_NAME, COL_EMAIL}, null, 
        null, null, null, null); 
     } 

     public Cursor getRecord(long rowId) throws SQLException { 

      Cursor cursor = db.query(true, DATABASE_TABLE, new String[] {COL_ID, COL_NAME, 
        COL_EMAIL}, COL_ID + "=" + rowId, null, null, null, null, null); 

      if (cursor != null) 
       cursor.moveToFirst(); 

      return cursor; 
      } 

     public boolean updateRecord(long rowId, String name, String email) { 
      ContentValues content = new ContentValues(); 
      content.put(COL_NAME, name); 
      content.put(COL_EMAIL, email); 
      return db.update(DATABASE_TABLE, content, COL_ID + "=" + rowId, null) > 0; 
     }  

}

+0

在運行至少一次應用程序後,您是否更改過'DATABASE_TABLE'?如果是這樣,你需要更新你的SQLite模式,最簡單的方法是使'DATABASE_VERSION = 2;'。另外Android對主鍵非常關注,您應該將'COL_ID'更改爲''_id「'。 – Sam

+0

是的,我確實改變了它。我將我的版本號切換爲2,並將COL _KEY切換爲「_id」。我認爲問題是版本號,因爲現在它工作,所以非常感謝。 – user1930452

回答

3

你改變DATABASE_TABLE運行你的應用程序後,至少一次?如果是這樣你需要更新你的SQLite模式,最簡單的方法是make DATABASE_VERSION = 2;。另外Android對主鍵非常講究,您應該將COL_ID更改爲"_id"

將來,您每次更改CREATE_TABLE聲明時都必須遞增DATABASE_VERSION。否則SQLite將不會有當前的信息。

+0

如果這個答案幫助你解決你當前的問題,那麼標記它的答案是爲其他人尋找相同的幫助。謝謝。 –