2012-05-05 79 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