2012-06-15 8 views
0

나는 네 테이블 마녀 하나 (named table_file) 다른 테이블에서 외래 키를 가지고 데이터베이스를 만들려면, 먼저 모든 테이블을 동시에 만들려고하지만 table_file 날 외국과 관련된 오류를 제공합니다 열쇠, 그래서 내 DBhelper 에서이 테이블을 만드는 코드를 주석, 그리고 성공적으로 다른 테이블을 만들지 만, tabe_file abe 코드를 작성 주석을 내릴 때이 테이블을 만들려고 나를 말 : sqlite 반환 된 : 오류 코드 = 1, msg = 그 테이블이 없다 : file_table와 나는 logcat에있다.android에 데이터베이스를 만듭니다

06-15 13:26:19.841: E/Database(24784): Error inserting file_category_column=0 file_theme_column=0 file_name_column=priv_priv_222_2012-06-15.pdf file_date_creating_column=1 
06-15 13:26:19.841: E/Database(24784): android.database.sqlite.SQLiteException: no such table: file_table: , while compiling: INSERT INTO file_table(file_category_column, file_theme_column, file_name_column, file_date_creating_column) VALUES(?, ?, ?, ?); 
06-15 13:26:19.841: E/Database(24784): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 
06-15 13:26:19.841: E/Database(24784): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92) 
06-15 13:26:19.841: E/Database(24784): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65) 
06-15 13:26:19.841: E/Database(24784): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83) 
06-15 13:26:19.841: E/Database(24784): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41) 
06-15 13:26:19.841: E/Database(24784): at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1149) 
06-15 13:26:19.841: E/Database(24784): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1569) 
06-15 13:26:19.841: E/Database(24784): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426) 

이 테이블을 만들려면 어떻게해야합니까?

+0

오류가 아니라 코드를 표시해야합니다. – Barak

+0

마녀 코드 내 dbhelper 클래스 또는 테이블에 삽입 할 다른 클래스가 필요합니다 – user1381760

+0

내 파일 테이블을 추가하지 않은 유청 물어 그것은 언제든지 우리가 좋아하는 언제든지 기존 데이터베이스에 테이블을 추가하는 안드로이드에 sqlite와 가능한가요? – user1381760

답변

0

SQLite에 대한 자습서를 참조하십시오.

http://www.vogella.com/articles/AndroidSQLite/article.html

는 그러한 테이블에 대해 불평하면, 테이블이 존재하지 않습니다. 현재 스키마를 업그레이드하는 경우 onUpgrade()가 호출되도록 데이터베이스 버전을 업데이트하고 onUpgrade()에서 작업하여 테이블을 다시 만들도록하십시오. 위의

public PLSQLiteOpenHelper(Context context, String name, CursorFactory factory, int version, String tableNames[], String fieldNames[][], String fieldTypes[][]) { 
    super(context, name, factory, version); 
    TableNames = tableNames; 
    FieldNames = fieldNames; 
    FieldTypes = fieldTypes; 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    if(TableNames == null){ 
     message = NO_CREATE_TABLES; 
     return; 
    } 

    for(int i = 0; i < TableNames.length; i++){ 
     String sql = "CREATE TABLE " + TableNames[i] + "("; 
     for(int j = 0; j < FieldNames[i].length; j++) 
      sql += FieldNames[i][j] + " " + FieldTypes[i][j] + ","; 
     sql = sql.substring(0, sql.length() - 1); 
     sql += ")"; 
     db.execSQL(sql); 
    } 
} 

만 생성 기능입니다 :

+0

내 문제는 데이터베이스를 만드는 방법이 아니지만 외래 키가있는 테이블을 만드는 방법입니다. android.database.sqlite.SQLiteException : 외래 키 정의에서 "file_category_column"열을 알 수 없습니다. 존재하지 않으면 테이블 생성 file_table (_id integer 기본 키 자동 증가, file_name_column text not null, FOREIGN KEY (file_category_column) 참조 date_table (_id), file_cloud_column 텍스트 기본값은 null, file_date_upload_column 텍스트 기본값 (file_category_column) 참조 table_table (_id), FOREIGN KEY (file_theme_column) REFERENCES theme_table (_id) FOREIGN KEY (file_date_creating_column) 없는); – user1381760

+0

충분하지만 오류 메시지를 통해 참조하는 테이블이 존재하지 않는다는 것을 분명히 알 수 있습니다. 따라서 테이블이 없기 때문에 실패하고 있다고 가정 할 수 있습니다. 테이블이 존재하면 다른 오류가 발생할 수 있지만 거기에 올 때까지 관계를 만들 수있는 방법은 없습니다. 표를 작성하는 코드가 나열되어 있지 않으므로 필자가 진행해야하는 유일한 작업은 실제로 필요한 표를 작성하는 방법입니다. – stuckless

0

내가 어떤 함수에 클래스를 사용하고, 당신은 시도 할 수 있습니다. 당신은 그것을 보려고 시도 할 수 있습니다.

0

기존 데이터베이스에 다른 테이블을 추가하려면 (처음에 앱 내에 만들었다 고 가정) onUpgrade 메서드를 변경할 수 있습니다.

onUpgrade 데이터베이스를 업그레이드해야 할 때마다 호출됩니다. DB가 마지막으로 열렸을 때 저장 한 버전 번호와 비교하여 사용자가 제공 한 버전 번호를 확인하여 확인합니다. onUpgrade을 호출하려면 VERSION_NUMBER를 증가시켜야합니다.

@Override 
public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.executeSQL(DATABASE_CREATETABLE2); 
} 

는 DATABASE_CREATETABLE2는 (당신이 다른 테이블에 한 아마도처럼) 테이블을 작성하는 SQL 문을 들고 문자열이 될 것입니다.

관련 문제