3

3 つの列を持つ person というテーブルがあります。それらはIDNAME、およびPASSWORDです。AGEという新しい列を追加する必要があります。この方法で試してみましたが、うまくいきません。この問題を克服するのを手伝ってください

public class Userdb {
    public static final String KEY_ROWID = "Id";
    public static final String KEY_NAME = "Person_name";
    public static final String KEY_PASSWORD = "Person_password";
    public static final String KEY_AGE = "Person_age";

    private static final String DATABASE_NAME = "People_db_1";
    private static final String DATABASE_TABLE = "people_table";
    private static final int DATABASE_VERSION = 1;


    private static class Dbhelper extends SQLiteOpenHelper {

        public Dbhelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            // TODO Auto-generated constructor stub
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub

            db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID
                    + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_NAME
                    + " TEXT NOT NULL, " + KEY_PASSWORD + " TEXT NOT NULL); ");

        }


        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub

            db.execSQL("DROP TABLE IF EXISTS" + DATABASE_TABLE);
            db.execSQL("ALTER TABLE " + DATABASE_TABLE +" ADD COLUMN "+ KEY_AGE +" TEXT NOT NULL ; ");
            onCreate(db);

        }

    }
4

3 に答える 3

5

データベースのアップグレード

SQLiteOpenHelper の実装のコンストラクターは、スーパー コンストラクターを呼び出して、データベース名とバージョンを渡す必要があります。onUpgrade() メソッドは、バージョン整数がエミュレータで実行中の現在のバージョンより大きい場合にのみ呼び出されます。onUpgrade() メソッドを呼び出す場合は、コードでバージョン番号をインクリメントする必要があります。

onCreate() と onUpgrade() の詳細を参照してください

于 2013-08-20T08:19:22.263 に答える
1

新しく追加された列にはNULL値 (または句で指定した値) が含まれるため、制約DEFAULTのある列を追加することはできません。NOT NULLさらに、存在しないテーブルに列を追加することはできません (削除したばかりであるため)。

次のいずれかを実行できます

  • 制約を削除するNOT NULLか、句を追加しますDEFAULT(テーブルを削除しないでください)。また
  • CREATE TABLE古いテーブルを削除し、完全なステートメントで新しいテーブルを作成します。
于 2013-08-19T14:21:18.680 に答える
1

sqliteにALTER COLUMNがあるとは思いません。

このリンクで提案されている手順に従ってください

それが助けになったかどうか教えてください。

于 2013-08-19T13:52:40.897 に答える