java - 创建数据库时"column does not exist"

标签 java android sqlite illegalargumentexception

我正在尝试使用简单的数据库(使用内置的 sqlite 数据库)创建一个 Android 应用程序。 我创建了一个扩展 SQLiteOpenHelper 的类:

public class DatabaseHandle extends SQLiteOpenHelper {

private static final String DATABASE_NAME = "pass_db";
public static final String ALIAS_NAME = "name";
public static final String USER_NAME = "user";
public static final String PASSWORD = "password";
public static final String TABLE_NAME = "passwords";


public DatabaseHandle(Context context) {
    super(context, DATABASE_NAME, null, 2);

}

@Override
public void onCreate(SQLiteDatabase database) {
    Log.i("DatabaseHandle","inside onCreate");
    database.execSQL("CREATE TABLE "+ TABLE_NAME +" (_id INTEGER PRIMARY KEY AUTOINCREMENT," +
            " "+ALIAS_NAME+" TEXT, " + " "+USER_NAME+" TEXT, "+PASSWORD+" TEXT);");
    ContentValues values = new ContentValues();
    values.put(ALIAS_NAME, "Bank");
    values.put(USER_NAME, "maya123");
    values.put(PASSWORD, "xyz123");
    database.insert(TABLE_NAME, ALIAS_NAME, values);
}

并尝试使用 SimpleCurserAdapter 获取此数据:

public class MainActivityPasswords extends ListActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.user_list);
    database = (new DatabaseHandle(this)).getWritableDatabase();

    passwordCursor = database.rawQuery("SELECT _id, name, password FROM passwords ORDER BY name", null);
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
            R.layout.row, 
            passwordCursor, 
            new String[]{DatabaseHandle.ALIAS_NAME, DatabaseHandle.USER_NAME, DatabaseHandle.PASSWORD},
            new int[]{R.id.alias, R.id.user_name, R.id.password}, 0);
    setListAdapter(adapter);
    registerForContextMenu(getListView());
}

(这当然是部分代码)

运行代码时我得到:

Java.lang.IllegalArgumentException: Column 'user' does not exist.

这是为什么呢?当打开数据库文件本身时,我可以清楚地看到我有“用户”列。

救命!

最佳答案

您忘记在查询中选择列用户

改变这个

passwordCursor = database.rawQuery("从密码中选择_id、名称、密码 ORDER BY 名称", null);

到此

passwordCursor = database.rawQuery("从密码中选择 _id、名称、用户、密码 ORDER BY 名称", null);

关于java - 创建数据库时"column does not exist",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27388104/

相关文章:

iphone - 在 iPhone 上的 sql-lite 中可以重新索引多少条记录?

java - 将字符网格添加到 jPanel

安卓日历。

java - 预定的 future 会导致内存泄漏吗?

sql - 序列化还是 SQlite?

android - 尝试从 SQLite 数据库中删除最后一行时出现语法错误 (code1)

java - 映射对象列表以映射

java - Java 中的字符串 replaceAll()

java - Hibernate ManyToMany 结果为笛卡尔积

android - 放置自动完成 fragment 自动关闭