簡體   English   中英

嘗試添加第二張表時應用崩潰

[英]App crashing when trying to add a second table

好吧,我現在真的很困惑。 我正在嘗試向程序中添加新表,但是每當執行此操作時,我都會崩潰,尤其是onCreate方法。 我無法為我的愛找出原因。 有什么建議么?

這也是我得到的錯誤,但是我在任何地方都找不到category.db

引起原因:android.database.sqlite.SQLiteException:否這樣的表:category.db(代碼1):,而編譯時:SELECT * FROM Categories.db

private final static int DB_VERSION = 2;

public static String TABLE_NAME = "players";
public static String DB_NAME = "playerslist.db";
public static String SCORE = "score";
public static String ID = "_id";
public static String PLAYER_NAME = "name";

public static String CATEGORY_TABLE_NAME = "categories";
public static String CATEGORY_NAME = "category_name";
public static String CATEGORY_VALUE = "category_value";
public static String CATEGORY_ID = "category_id";
public static String CATEGORY_PLAYER_ID = "category_player_id";

public static String CREATE_PLAYER_TABLE = "CREATE TABLE "+TABLE_NAME+" ("+ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+PLAYER_NAME+" TEXT, "+
        SCORE+" TEXT)";
public static String CREATE_CATEGORY_TABLE = "CREATE TABLE "+CATEGORY_TABLE_NAME+"("+CATEGORY_ID+" INTEGER" +
        "PRIMARY KEY AUTOINCREMENT, "+CATEGORY_NAME+" TEXT, "+CATEGORY_VALUE+" INTEGER, "
        +CATEGORY_PLAYER_ID+" INTEGER)";

public SQLHelp(Context context) {
    super(context, DB_NAME, null, 2);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(CREATE_PLAYER_TABLE);
    db.execSQL(CREATE_CATEGORY_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    for(int i = oldVersion; i < newVersion; i++){
        switch(i){
            case 1:
                db.execSQL(CREATE_CATEGORY_TABLE);
            break;
        }
    }
}

更改您的CREATE TABLE字符串以將IF NOT EXISTS包括在內,
CREATE TABLE IF NOT EXISTS Table_name(Columns)

從設備或仿真器中刪除您的應用程序,然后再次安裝/運行,它應該可以工作。

我遇到了同樣的問題,然后我簡單地從設備中刪除了該應用程序,它開始工作了。

嘗試這個..

創建第二個表時,您具有“ INTEGER” +“ PRIMARY KEY AUTOINCREMENT”。

我做到了這一點。

public static String CREATE_CATEGORY_TABLE = "CREATE TABLE "+CATEGORY_TABLE_NAME+"("+CATEGORY_ID+ " INTEGER PRIMARY KEY AUTOINCREMENT, "+CATEGORY_NAME+" TEXT, "+CATEGORY_VALUE+" INTEGER, "
    +CATEGORY_PLAYER_ID+" INTEGER)";

您應該致電SQLiteOpenHelper

private static class DatabaseHelper extends SQLiteOpenHelper{
    DatabaseHelper(Context context){
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    public void onCreate(SQLiteDatabase db){
          db.execSQL(CREATE_PLAYER_TABLE);
          db.execSQL(CREATE_CATEGORY_TABLE);
    }
    public void onUpgrade(SQLiteDatabase db, int arg1, int arg2{
          db.execSQL("DROP TABLE IF EXISTS " + CREATE_PLAYER_TABLE);
          db.execSQL("DROP TABLE IF EXISTS " + CREATE_CATEGORY_TABLE);
          onCreate(db);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM