46

私はこのエラーが発生しています - 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 という名前の列がありません

助けてください!!

4

16 に答える 16

4

Benil が上記のコメントで述べているように、データベースのバージョン番号を変更して、コードを再度実行してください。

于 2013-11-07T01:58:48.683 に答える
3

設定からアプリの「データを消去」をお試しください。私にとって、この問題は、SD カードにデータを保存していて、後でいくつかの列を追加したために発生していました。そのため、SD カードに保存する場合は、以前のデータを削除してください。

于 2016-01-15T13:27:47.513 に答える
2

作成クエリを間違えて修正した場合、可能性があります。

したがって、ファイルシステムにはデータベースがありますが、このデータベースにはそのような列がない可能性があります。

解決策: エミュレーターで db ファイルを見つけます: data/data/com.somecompany.yourapp/databases/db を削除してから、もう一度やり直してください。

SQL エクスプローラーでこのファイルを開き、その列があるかどうかを確認することもできます。

于 2014-06-21T14:58:54.337 に答える
1

次のようにバージョンを指定するだけです。

private static final int VERSION = 4;
于 2016-11-15T14:09:22.863 に答える
0

次のように、異なるバージョンのDBを使用するための可能な解決策(最良の解決策ではありません):

public static final int DATABASE_VERSION = 2;

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

わたしにはできる。

于 2020-04-29T21:27:47.403 に答える
-1

この質問に遅くまで返信したことは知っていますが、誰かがこの回答で彼女の問題を解決できるかもしれません。後でテーブルデータベースにデータを入れるので、データベース名を変更するのが最善の解決策です。

于 2020-05-07T07:13:53.113 に答える