2013-07-03 20 views
26

我得到这个错误列 - 07-03 12:29:18.643: E/SQLiteLog(5181): (1) table accounts has no column named otherNotesAndroid的SQLite的问题 - 表...没有名为

这是我的代码:

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)表帐户没有列命名密码

请帮忙!!

+3

拔出你db和检查,如果那些表中创建提到的列.. – CRUSADER

+5

潜在您正在使用旧版本的数据库的工作。尝试进入设置/应用程序和“清除数据”在您的应用程序。或者卸载并重新安装它。 –

+2

更改数据库版本号并再次运行代码。 ! –

回答

64

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

+2

是的,工作。我去了设置,并清除了以前的所有数据。它在那之后完美运作。 谢谢! –

1

这里是你的查询条件。

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

可以详细说明你所做的更改为什么? –

+0

KEY_USERID,KEY_PASSWORD等是已经声明的字符串变量。你的代码绝对没有意义 –

+0

他只是把KEY_ID写在“”中,所以我们也可以给constarint,因为我显示....他可以试试这个一次..我认为他在编写他的查询时犯了错误。 –

2

SQL代码看起来不错。 我认为你忘记了在你创建的数据库对象上调用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使用。

1

这是可能的,如果你在创建查询犯了一个错误,然后解决它,

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

解决方案: 在模拟器中找到一个db文件:data/data/com.somecompany.yourapp/databases/db并删除它,然后重试。

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

8

好吧,如果你是confindent有关语法创建表,比它可能发生 当您在同一个表中添加新列,对于...

1)反安装从您的设备和运行它再次。

OR

2)设置 - >程序 - > ClearData

OR

3)变更DATABASE_NAME在 “数据库处理器” 类 (我面临同样的问题,但是,我通过更改DATABASE_NAME来防守。)

OR

4)变更DATABASE_VERSION在 “数据库处理器” 类 (如果已经添加了新的列比将autimatically升级)

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

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

1

你只需指定的版本是这样的:

private static final int VERSION = 4;