Android SQLite问题 - 表...没有命名列

Ran*_*ser 33 sqlite android android-sqlite

我收到这个错误 - 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
}
Run Code Online (Sandbox Code Playgroud)

另外,当我删除以下语句时:

values.put(KEY_OTHERNOTES, account.getOtherNotes()); // account othernotes
Run Code Online (Sandbox Code Playgroud)

然后我遇到密码等问题.即,(1)表帐户没有列名为密码

请帮忙!!

小智 72

您似乎稍后在数据库中添加了一些列.我同意Ken Wolf的意见,你应该考虑卸载并重新安装你的应用程序.一种更好的方法是,删除并重新创建onUpdate方法中的所有表,并在每次更改模式时增加db版本.

  • 是的,那很有效.我去了设置,并清除了以前的所有数据.之后它完美地运作了.谢谢! (3认同)

Kus*_*ush 16

好吧,如果您对创建表的语法有所了解,那么当您在同一个表中添加新列时可能会发生这种情况,为此...

1)从您的设备取消并再次运行.

要么

2)设置 - > app - > ClearData

要么

3)在"DatabaseHandler"课程中更改DATABASE_NAME (我遇到了同样的问题.但是我改变了DATABASE_NAME,这让我感到很沮丧.)

要么

4)更改"DatabaseHandler"类中的DATABASE_VERSION (如果添加了新列而不是自动升级)

public DatabaseHandler(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
Run Code Online (Sandbox Code Playgroud)