1. ホーム
  2. android

[解決済み] Android SQLite の問題 - テーブル ... には名前が付けられたカラムがない

2022-02-17 07:17:41

質問

次のようなエラーが発生します。 07-03 12:29:18.643: E/SQLiteLog(5181): (1) table accounts has no column named otherNotes

これは私のコードです。

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "accountsManager";
private static final String TABLE_ACCOUNTS = "accounts";

private static final String KEY_ID = "id";
private static final String KEY_TITLE = "title";
private static final String KEY_USERID = "userId";
private static final String KEY_PASSWORD = "password";
private static final String KEY_LOGINURL = "loginUrl";
private static final String KEY_OTHERNOTES = "otherNotes";

public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

public void onCreate(SQLiteDatabase db) {
    String CREATE_ACCOUNTS_TABLE = "CREATE TABLE " + TABLE_ACCOUNTS + "("
            + KEY_ID + " INTEGER PRIMARY KEY," + KEY_TITLE + " TEXT,"
            + KEY_USERID + " TEXT," + KEY_PASSWORD + " TEXT," + KEY_LOGINURL + " TEXT,"
            + KEY_OTHERNOTES + " TEXT" + ");";
db.execSQL(CREATE_ACCOUNTS_TABLE);
}


public void addAccount(AccountDetails account) {
    SQLiteDatabase db = this.getWritableDatabase();
    System.out.println("Hello!");   


    ContentValues values = new ContentValues();
    values.put(KEY_TITLE, account.getTitle()); // Account Title
    values.put(KEY_USERID, account.getUserId()); // account userid
    values.put(KEY_PASSWORD, account.getPassword()); // account password
    values.put(KEY_LOGINURL, account.getLoginUrl()); // account loginurl
    values.put(KEY_OTHERNOTES, account.getOtherNotes()); // account othernotes
    Log.v("title", KEY_TITLE);


    // Inserting Row
    db.insert(TABLE_ACCOUNTS, null, values);
    db.close(); // Closing database connection
}

また、以下の記述を削除すると

values.put(KEY_OTHERNOTES, account.getOtherNotes()); // account othernotes

それから、パスワード...などで同じ問題が発生します。 すなわち、(1) accounts テーブルには password という名前のカラムがない。

助けてください!

解決方法は?

データベースで後からカラムを追加したようです。Ken Wolfと同意見で、アプリのアンインストールと再インストールを検討すべきです。のすべてのテーブルを削除して再作成するのもよい方法です。 onUpdate メソッドを使用し、スキーマを変更するたびに db のバージョンを上げてください。