表格accounts没有名为otherNotes的列。

47
错误:
07-03 12:29:18.643: E/SQLiteLog(5181): (1) 表accounts没有名为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 的列


3
请提取您的数据库并检查这些表中是否已创建了提到的列。 - CRUSADER
7
可能你正在使用旧版本的数据库。尝试进入设置/应用程序并在应用程序上“清除数据”。或者卸载并重新安装它。 - Ken Wolf
3
将数据库版本号更改并重新运行代码。!! - Benil Mathew
2
只需从设备/模拟器中卸载该应用程序,然后再次运行即可。 - S.D.
1
@BenilMathew 更改版本号起作用了..谢谢! - Harichandan Pulagam
显示剩余3条评论
17个回答

1
您可以像这样指定版本:

private static final int VERSION = 4;

0

当前代码为

override fun onCreate(db: SQLiteDatabase?) {
    val createPWDTable =
        "CREATE TABLE IF NOT EXISTS $tblPassword ($pwdId INTEGER PRIMARY KEY autoincrement,$title TEXT,$email TEXT,$pwd TEXT,$notes TEXT);"
    db!!.execSQL(createPWDTable)
}

现在添加列 encrypted
override fun onCreate(db: SQLiteDatabase?) {
    val createPWDTable =
        "CREATE TABLE IF NOT EXISTS $tblPassword ($pwdId INTEGER PRIMARY KEY autoincrement,$title TEXT,$email TEXT,$pwd TEXT,$encrypted INT,$notes TEXT);"
    db!!.execSQL(createPWDTable)
}

override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
    if (newVersion == 2) {
        val query = "ALTER TABLE $tblPassword ADD COLUMN $encrypted INT DEFAULT '0'"
        db!!.execSQL(query)
    } 
}

如果是新用户,则onCreate方法直接创建带有加密值的表。 如果是旧用户,则onUpgrade方法检查数据库版本并更改表。


0

在我的情况下,从手机设置中清除应用数据起作用了。在 Android 模拟器中也可以这样做。


这不是正确的方法,而是一种变通方法。实现的正确方法是为数据库创建“版本”。因此,我投票关闭此事。 - Abhishek Dutt

0

可能的解决方案(不是最佳方案)是使用不同版本的数据库,例如:

public static final int DATABASE_VERSION = 2;

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

对我来说它有效。


-1

我知道我回答这个问题有点晚了,但也许有人可以通过这个答案解决她的问题。 您稍后将一些数据放入表数据库中,因此最好的解决方案是重新命名您的数据库名称。


-2

在我的情况下,onCreate()方法中存在查询语法错误(需要在列名和数据类型之间添加空格..请参见附图)

为了解决它.. 我按照以下步骤进行:

  1. 更正您的语法错误
  2. 更改数据库版本号
  3. 从设置中清除应用程序数据
  4. 卸载并再次运行您的应用程序。]1]1

希望能有所帮助


-3

卸载您的应用程序并重新安装您的应用程序,之后它将正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接