我的應用程序有一個包含三個表格的數據庫:一個用於存儲它追蹤的人員的姓名,一個用於跟蹤正在進行的事件,另一個用於缺少更好的術語 - 進行設置。在getWritableDatabase/getReadableDatabase後沒有調用onCreate
我在應用程序啓動時加載第一個表格。我要求一個可讀的數據庫加載成員來顯示,然後我在列表更改時寫入數據庫。我在這裏沒有問題。
但是,其他兩張表我無法工作。輔助類中的代碼與類名和列名的例外情況相同,並且(至少直到我嘗試訪問表的點),使用該表的代碼也幾乎相同。
下面是我的助手類的代碼(我得爲每個表單獨的幫手,正如我所說,這是除了類名和列相同):
public class db_MembersOpenHelper extends SQLiteOpenHelper
{
public static final String TABLE_NAME = "members_table";
public static final String[] COLUMN_NAMES = new String[] {
Constants.KEY_ID,
"name",
"score"
};
private static final String TABLE_CREATE = "CREATE TABLE " + TABLE_NAME + " ("
+ COLUMN_NAMES[0] + " INTEGER PRIMARY KEY autoincrement, "
+ COLUMN_NAMES[1] + " TEXT, "
+ COLUMN_NAMES[2] + " INTEGER);";
public db_MembersOpenHelper(Context context)
{
super(context, Constants.DATABASE_NAME, null, Constants.DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) { db.execSQL(TABLE_CREATE); }
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
Log.w("TaskDBAdapter", "Upgrading from version " + oldVersion + " to " + newVersion + ".");
// Do nothing. We do not have any updated DB version
}
}
下面是我如何使用它成功:
這裏的地方失敗:
db_PlayersOpenHelper playersDbHelper = new db_PlayersOpenHelper(this);
final SQLiteDatabase playersDb = playersDbHelper.getWritableDatabase();
if(newGame)
{
for(String name : players)
{
ContentValues row = new ContentValues();
row.put(COLUMN_NAMES[1], name);
row.put(COLUMN_NAMES[2], (Integer)null);
playersDb.insert(TABLE_NAME, null, row);
}
}
第一個工程就像一個魅力。第二個結果在ERROR/Database(6739): Error inserting achievement_id=null name=c android.database.sqlite.SQLiteException: no such table: players_table: , while compiling: INSERT INTO players_table(achievement_id, name) VALUES(?, ?); ...
我做了一些測試,並且onCreate
方法根本沒有被調用的表不工作。這可以解釋爲什麼我的手機認爲該表不存在,但我不知道爲什麼該方法沒有被調用。
我不明白這一點;我做了那麼一張桌子,我不小心和另一張桌子做得很對?
哦,好吧,這是有道理的。我誤解了幫手的工作方式。謝謝。 –