2012-05-05 139 views
1

我不確定我的問題。 queriyng第二表時,我收到沒有這樣的表。這些都是在onCreate方法中sqlite表創建

db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + KEY_CBID 
        + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_NAME 
        + " TEXT NOT NULL, " + KEY_RACE + " TEXT NOT NULL," 
        + KEY_CLASS + " TEXT NOT NULL," + KEY_DEITY 
        + " TEXT NOT NULL," + KEY_GENDER + " TEXT NOT NULL," 
        + KEY_HEIGHT + " TEXT NOT NULL," + KEY_WEIGHT 
        + " TEXT NOT NULL);"); 

     db.execSQL("CREATE TABLE " + DATABASE_TABLE2 + " (" + KEY_CSID 
        + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_SKILL 
        + " TEXT NOT NULL, " + KEY_CBID + " INTEGER PRIMARY KEY FOREIGN KEY);" 
        ); 

編輯:顯示CVS

String skill = "blah test"; 
    Cursor c = ourDatabase.rawQuery("SELECT " + KEY_CBID + " FROM " + DATABASE_TABLE + " order by " + KEY_CBID + " DESC limit 1", null); 
    if (c != null) 
    { 
     c.moveToFirst(); 
     cbid = c.getInt(0); 
    } 

    ContentValues cv = new ContentValues(); 
    cv.put(KEY_SKILL, skill); 
    cv.put(KEY_CBID, cbid); 
    return ourDatabase.insert(DATABASE_TABLE2, null, cv); 

我的select語句是:

Cursor c = ourDatabase.rawQuery("SELECT " + KEY_SKILL + ", " + KEY_NAME + ", " + KEY_CBID + " FROM " + DATABASE_TABLE + ", " + DATABASE_TABLE2 + " WHERE " + DATABASE_TABLE +"."+KEY_CBID+" = " +DATABASE_TABLE2+"."+KEY_CBID+" && " +DATABASE_TABLE+"."+KEY_NAME+" = '"+item+"'", null); 
+0

什麼是數據庫文件的路徑? – alex

回答

2

我不相信你的第二個表正在創建,下面是如何聲明一個外鍵表:

CREATE TABLE artist(
    artistid INTEGER PRIMARY KEY, 
    artistname TEXT 
); 

CREATE TABLE track(
    trackid  INTEGER, 
    trackname TEXT, 
    trackartist INTEGER, 
    FOREIGN KEY(trackartist) REFERENCES artist(artistid) 
); 

我把這些從SQLite.org

而且外鍵默認情況下,SQLite中禁用,Android的使用:

db.execSQL("PRAGMA FOREIGN_KEYS=ON;"); 

插入數據之前,如果你還沒有;

0
  1. 檢查你的日誌貓,看看在創建第二個表時是否有錯誤。 如果有來自sqllite一個錯誤,它會在logcat的登錄

  2. 當一個新的表被添加到數據庫,讓你在呼喚db.open確保DB升級 IF從您的代碼,如果數據庫已經創建它將會被打開。所以在這種情況下,創建新表的代碼不會被打中。所以,你必須確保你升級數據庫,你可以刪除所有現有的表和重新創建

    @覆蓋 公共無效的onCreate(SQLiteDatabase DB){

    createAllTables(db); 
        Log.v(DBTAG, "DATABASE CREATED"); 
        // Toast.makeText(mCtx, "created", Toast.LENGTH_SHORT).show(); 
    } 
    
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
        Log.w(DBTAG, "Upgrading database from version " + oldVersion 
          + " to " + newVersion + ", which will destroy all old data"); 
        dropExistingTables(db); 
        onCreate(db); 
    } 
    
    private void dropExistingTables(SQLiteDatabase db) { 
    
        for (int i = 0; i < Utils.getDropTableQueries().size(); i++) { 
         db.execSQL(Utils.getDropTableQueries().get(i)); 
        } 
    } 
    

因此得出結論確保你正在創建表,並且創建時沒有錯誤。

+0

謝謝!我用logcat計算出來了 – SilverWolfe