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 } 

另外,当我删除以下声明:

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

然后我得到与密码相同的问题…等等。 即(1)表帐户没有列命名密码

请帮忙!!

Solutions Collecting From Web of "Android的SQLite问题 – 表…没有列名"

看来你以后在数据库中添加了一些列。 我同意肯沃尔,你应该考虑卸载并重新安装你的应用程序。 一个更好的方法是,在onUpdate方法中删除并重新创build所有表,并在每次更改模式时增加db版本。

那么,如果你对创build表的语法比较自信,那么当你在同一个表中添加新的列时,可能会发生这种情况。

1)从您的设备中取出并重新运行。

要么

2)设置 – >应用程序 – > ClearData

要么

3)在你的“DatabaseHandler”类中更改DATABASE_NAME (我面临同样的问题,但是我通过更改DATABASE_NAME来避免)。

要么

4)改变你的“DatabaseHandler”类中的DATABASE_VERSION (如果你添加了新的列而不是自动升级)

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

正如Benil在上面的评论中所说 ,更改数据库版本号并再次运行代码。

SQL代码看起来不错。 我认为你忘了在你创build的数据库对象上调用open()

添加这个方法给你SQL类:

  private DbHelper ourHelper; private final Context ourContext; private SQLiteDatabase ourDatabase; public DataBaseMain open() throws SQLException{ //open the database to make her writeable, must be called before writing to database ourHelper = new DbHelper(ourContext); ourDatabase = ourHelper.getWritableDatabase(); return this; } public void close(){ //closing the database for writing, avoids error. ourHelper.close(); } 

当你想打电话给DB时使用。

从设置中尝试“清除数据”您的应用程序。 对我来说,这个问题发生的原因是我在SD卡上的存储数据,后来我添加了一些列。 所以如果你在SD卡上保存,删除以前的数据。

这是你的查询。

  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);"; 

如果你在创build查询中犯了一个错误,然后修复它,

所以在文件系统中你有一个分贝,但是这个分贝可能没有这样的列。

解决scheme:在模拟器中find一个db文件:data / data / com.somecompany.yourapp / databases / db并将其删除,然后再试一次。

也可以在一些sql explorer中打开这个文件,并检查是否有该列。

你可以像这样指定版本:

 private static final int VERSION = 4;