2012-05-05 4 views
1

Im 내 문제가 확실하지 않습니다. 보여주는 CVS sqlite 테이블 만들기

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); 

내 선택 문

한다 : 두 번째 테이블을 queriyng 때 나는 그런 테이블을 받고 없습니다입니다 .. 이들은 모두

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);" 
        ); 

을 편집에서 onCreate 방법 내에

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는 기본적으로 비활성화됩니다

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

데이터를 삽입하기 전에, 당신이 이미하지 않은 경우;

0
  1. 두 번째 테이블을 만드는 동안 오류가 있는지 확인하려면 cat에 로그인하십시오. sqllite에서 오류가 발생하면 , 당신이 db.open 호출하는 경우 데이터베이스 확실 DB, 당신의 코드에서 IF를 업그레이드 새로운 테이블이 DB에 추가 될 때

  2. 만들 로그 캣에 기록됩니다 이미 열려있을 것입니다. 따라서이 경우 새 테이블을 만드는 코드는 적중되지 않습니다. 그래서 당신은 당신이 결론

    @Override 공공 무효에서 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

관련 문제