1

質問があります。

データベースにテーブルが1つしかない

@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL( "CREATE TABLE books (_id INTEGER PRIMARY KEY AUTOINCREMENT,title TEXT, author TEXT,isbn TEXT,city TEXT);");
        Log.v("onCreate-------","called onCreate"); 

    }

ここ:-

sqlite> select * from books;

また、正常に動作しています。

しかし、私は新しいテーブルを追加したいので、ここに追加しようとしています:-

@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        android.util.Log.w("books",
        "Upgrading database, which will destroy all old data");

        //db.execSQL("ALTER TABLE myallbooks ADD COLUMN city2");
        db.execSQL("CREATE TABLE myfields (author TEXT,isbn TEXT,city TEXT);");



        Log.v("onUpgrade-------","called onUpgrade with alter"); 
    }

バージョン番号を変更した後、アプリを実行しましたが、テーブルがどこにも見つかりませんでした。

sqlite> select * from myfields;

Error:-no such table :myfield...................なぜ作成されないのか

4

2 に答える 2

2

onUpgrade()データベースのバージョンを上位バージョンに変更すると呼び出されます。バージョンを増やしておらず、myfieldsテーブルの列を選択しようとしているようです。

バージョン番号が以前よりも大きい番号に更新されているかどうかを確認してください。

于 2013-01-18T10:55:58.773 に答える
1
@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL( "CREATE TABLE books (_id INTEGER PRIMARY KEY AUTOINCREMENT,title TEXT, author TEXT,isbn TEXT,city TEXT);");
        Log.v("onCreate-------","called onCreate"); 

   db.execSQL("CREATE TABLE myfields (author TEXT,isbn TEXT,city TEXT);");

    }

@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        android.util.Log.w("books",
        "Upgrading database, which will destroy all old data");

        //db.execSQL("ALTER TABLE myallbooks ADD COLUMN city2");
       // db.execSQL("CREATE TABLE myfields (author TEXT,isbn TEXT,city TEXT);");

          //delete tables
                db.execSQL("DROP TABLE IF EXISTS books");
          // Create tables again`enter code here`
        onCreate(db);

        Log.v("onUpgrade-------","called onUpgrade with alter"); 
    }
于 2013-01-18T11:01:22.183 に答える