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ステートメント自体は例外を引き起こしませんでした。select(check)ステートメントは

04-30 07:34:14.834:E / Database(305):parentid = -1 name =blablaの挿入中にエラーが発生しました04-3007: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):android.database.sqlite.SQLiteProgram.native_compile(ネイティブメソッド)04-30 07:34:14.834:E / Database(305):android.database .sqlite.SQLiteProgram.compile(SQLiteProgram.java:110)04-30 07:34:14.834:E / Database(305):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 / Database(305):androidで。

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-3007:34:14.834:E / Database(305):android.database.sqlite.SQLiteException:

エラースタックによると、親IDとして-1を挿入しようとしていますか?parentidは主キーであり、負の値を受け入れません

于 2012-04-30T12:12:35.833 に答える