0

正如主题所暗示的那样,我在 sqlite 中创建新表时遇到了一些问题。无论我用我的代码做什么,我都无法在数据库中创建新表。如果我查看数据库,则只有 android_metadata tb,没有别的。创建一个新的代码是:

...
this.createTable(R.string.nametable, "_id INT PRIMARY KEY, " + "parentID INT, " + "name TEXT");
...

public void createTable(int id, String sql) {
        String table = this.getStringById(id);
        String _sql = "CREATE TABLE " + table + "(" + sql + ")";
        Log.d("Controller.createTable", _sql);
        this.mCurrentConnection.rawQuery(_sql, null);
        try {
            Cursor c = this.Select(id, "*", null);
            c.close(); 
            Log.d("Controller.createTable", "create finished");
        } catch (Exception e) {
            Log.d("Controller.createTable", "can't create table: " + table);
        }
    }

我在我的应用程序的构造器中打开或创建数据库

if(this.mCurrentConnection == null || !this.mCurrentConnection.isOpen()) {
            this.mCurrentConnection = this.mContext.openOrCreateDatabase(this.mDB, Context.MODE_PRIVATE , null);
        }

我已经尝试了一切:更改 db / tb 的名称,重新安装应用程序,放置“;” 或不在命令末尾,请使用新的干净 vm 进行尝试。我没有找到任何有用的现有帖子/答案来解决我的问题。如果我执行 _sql 语句

CREATE TABLE name_table(_id INT PRIMARY KEY, parentID INT, name TEXT)

在 phpmyadmin (MySQL) 中一切正常。

如果你能帮助我,我会很高兴。

问候亚历克斯

编辑:(回答下面的评论)

@VikramBodicherla:这就是问题所在。create 语句本身并没有引起任何异常。选择(检查)语句确实会抛出一个

04-30 07:34:14.834: E/Database(305): 插入 parentid=-1 时出错 name=blabla 04-30 07:34:14.834: E/Database(305): android.database.sqlite.SQLiteException:

没有这样的表:name_table:,编译时:INSERT INTO name_table(parentid, name) VALUES(?, ?); 04-30 07:34:14.834: E/Database(305): at android.database.sqlite.SQLiteProgram.native_compile(Native Method) 04-30 07:34:14.834: E/Database(305): at android.database .sqlite.SQLiteProgram.compile(SQLiteProgram.java:110) 04-30 07:34:14.834: E/Database(305): at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:59) 04-30 07: 34:14.834: E/Database(305): 在 android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:41) 04-30 07:34:14.834: E/Database(305): 在 android.database.sqlite。 SQLiteDatabase.compileStatement(SQLiteDatabase.java:1027) 04-30 07:34:14.834: E/Database(305): 在 android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1413) 04-30 07:34: 14.834:E/数据库(305):在安卓。

4

2 回答 2

1

你真的真的很想使用SQLiteOpenHelper类及其相关模式:它不仅用于升级,它还可以干净地处理创建表。

此外,您的 create 语句应该如下所示:

CREATE TABLE name_table (_id  INTEGER PRIMARY KEY AUTOINCREMENT, parentID INTEGER, name TEXT)

编辑:从您的跟踪中,您的 CREATE TABLE 永远不会运行(因此该表不存在)。使用 SQLiteOpenHelper 和execSQL函数来创建表,你应该已经准备好了。

于 2012-04-30T05:38:07.147 回答
0

04-30 07:34:14.834: E/Database(305): 插入 parentid=-1 时出错 name=blabla 04-30 07:34:14.834: E/Database(305): android.database.sqlite.SQLiteException:

根据您的错误堆栈,您是否尝试插入 -1 作为父 ID?parentid 是主键,不接受负值

于 2012-04-30T12:12:35.833 回答