Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 简单SQLite数据库获取游标错误_Android_Sql_Database_Cursor - Fatal编程技术网

Android 简单SQLite数据库获取游标错误

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

--编辑-解决方案--

感谢laalto,我意识到我忘记更新数据源中的allColumns数组,以便在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);
}
--初始问题--

因此,我尝试在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