Android 简单SQLite数据库获取游标错误
--编辑-解决方案-- 感谢laalto,我意识到我忘记更新数据源中的allColumns数组,以便在SQL查询中显示新列:Android 简单SQLite数据库获取游标错误,android,sql,database,cursor,Android,Sql,Database,Cursor,--编辑-解决方案-- 感谢laalto,我意识到我忘记更新数据源中的allColumns数组,以便在SQL查询中显示新列: private String[] allColumns = {ClientDataSQLHelper.COLUMN_ID, ClientDataSQLHelper.COLUMN_CLIENT_NAME, ClientDataSQLHelper.COLUMN_CLIENT_ADDRESS, ClientDataSQLHelpe
private String[] allColumns = {ClientDataSQLHelper.COLUMN_ID, ClientDataSQLHelper.COLUMN_CLIENT_NAME,
ClientDataSQLHelper.COLUMN_CLIENT_ADDRESS, ClientDataSQLHelper.COLUMN_CLIENT_NUMBER,
ClientDataSQLHelper.COLUMN_EMPLOYEE_ID};
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(TAG, "creating database");
db.execSQL(DB_CREATE);
}
--初始问题--
因此,我尝试在Android上创建一个简单的数据库,该数据库将维护客户名称、地址和号码,并为与客户一起工作的员工(比如清洁或家庭护理服务)附加一个员工id。我遇到的问题是,给定以下SQL查询字符串,我的表(从我的设计思路来看)应该有5行:
private static final String DB_CREATE = "create table " + TABLE_CLIENTS + "(" +
COLUMN_ID + " integer primary key autoincrement, " +
COLUMN_EMPLOYEE_ID + " integer, " +
COLUMN_CLIENT_NAME + " text not null, " +
COLUMN_CLIENT_ADDRESS + " text not null, " +
COLUMN_CLIENT_NUMBER + " text not null);";
在我的SQLHelper类中,使用相应的变量:
public static final String TABLE_CLIENTS = "clients";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_CLIENT_NAME = "name";
public static final String COLUMN_CLIENT_ADDRESS = "address";
public static final String COLUMN_CLIENT_NUMBER = "number";
public static final String COLUMN_EMPLOYEE_ID = "employee_id";
此查询在my SQLHelper的重写SQL查询中执行:
private String[] allColumns = {ClientDataSQLHelper.COLUMN_ID, ClientDataSQLHelper.COLUMN_CLIENT_NAME,
ClientDataSQLHelper.COLUMN_CLIENT_ADDRESS, ClientDataSQLHelper.COLUMN_CLIENT_NUMBER,
ClientDataSQLHelper.COLUMN_EMPLOYEE_ID};
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(TAG, "creating database");
db.execSQL(DB_CREATE);
}
我遇到的问题是,当我尝试实现我的DataSource类时,我的getAllClient()方法:
在整数employeeId=cursor.getInt(4)行上;我从一个有1行4列的游标窗口中读取第0行第4列时出现错误
。
但是根据我的SQL create查询,我应该有5列(\u id、姓名、地址、编号、员工id),不是吗?我的日志打印正确,因此我的值在这一点上是正确的,就好像我的SQL中的列\u EMPLOYEE\u ID+“integer”
部分没有有效地实现一样。可能是以下情况之一:
allColumns
投影只有4列您更新的问题显示原因1。所有列是否包含所有5列?你最近添加了第五列,忘记更新数据库文件了吗?哈哈,非常感谢。看来是时候休息了break@zgc7009-作为提示。用于从光标映射记录的while循环令人困惑且过于复杂。直接在查询之后取消moveToFirst()调用。去掉while循环中的moveToNext,改为将循环写为while(cursor.moveToNext()){…}@dymmeh谢谢,它使用的是我根据示例制作的旧模板。效率不是关键:P