0

我必须使用四个表创建数据库,其中一个(命名为 table_file)具有来自其他表的外键,首先我尝试同时创建所有表,但 table_file 给了我与外键相关的错误,所以我评论了代码在我的 DBhelper 中创建此表,并且我成功创建了其他表,但是当我取消注释 tabe_file 创建代码 abd 尝试创建此表时,它说我:sqlite 返回:错误代码 = 1,msg = 没有这样的表:file_table 和我在logcat中有那个

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)

我该怎么做才能创建这个表?

4

3 回答 3

0

要将另一个表添加到现有数据库(假设您首先在应用程序中创建它),您可以更改您的onUpgrade方法。

onUpgrade每当需要升级数据库时调用。它通过检查您提供的版本号与上次打开数据库时存储的版本号来确定。您必须增加 VERSION_NUMBER 才能onUpgrade被调用。

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

DATABASE_CREATETABLE2 将是一个包含用于创建表的 sql 语句的字符串(大概就像您为其他表所做的那样)。

于 2012-06-15T14:32:29.897 回答
0

请参阅 SQLite 上的本教程。

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

如果它抱怨没有这样的表,那么该表不存在。如果您正在升级当前架构,请确保您正在更新数据库版本,以便调用 onUpgrade(),并确保您正在执行 onUpgrade() 以便重新创建表。

于 2012-06-15T13:57:41.473 回答
0

我已经使用了一个类来实现某些功能,您可以尝试:

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

以上只是create函数。你可以试试看。

于 2012-06-15T13:59:09.253 回答