游标上的Android SQLite错误

时间:2018-04-04 11:18:55

标签: java android sqlite cursor

我目前正在开发一个Android项目,并坚持使用此方法。游标查询有效,但之后的任何内容都不起作用。如果我拿出退货公司'它运行的方法所以我猜测错误是在游标查询中。该方法采用名为'companyNameParemeter'的字符串参数。仅供参考的Android Studio是我正在使用的文本编辑器。

SQLiteDatabase db = this.getReadableDatabase();
    String returnString = "";

    Cursor cursor = db.rawQuery("Select * from " + CONTANT_INFO_AND_GPS_TABLE + " where " +
   KEY_COMPANY_NAME + " = ? ", new String[] {companyNameParamater});


    company returnCompany = new company(Integer.parseInt(cursor.getString(0)), cursor.getString(1),
            cursor.getString(2), cursor.getString(3),Double.parseDouble(cursor.getString(4) ),
             Double.parseDouble(cursor.getString(5)));

    /* returnString = ("Company is:\t" + returnCompany.getCompanyName() + ",\nContact name:\t" +
                returnCompany.getContactName() + ",\tContact No:\t" + returnCompany.getContactNumber()
                + ",\nGPS:\tLat:\t"
        + returnCompany.getGPS_Latitude() + "\tLong:\t" + returnCompany.getGPS_Longitude() );*/

        return returnString;

我检查了LogCat,我能找到的唯一相关错误就是这个

04-04 12:06:38.237 2032-1714/? E/GCoreUlr: Received null location result

2 个答案:

答案 0 :(得分:2)

尝试使用

cursor.moveToFirst()

右后用db.rawquery创建和填充它,或者用来从数据库中获取数据的调用,

它会确保你的光标指向你收到的第一个元素,我可能错了,但我记得它总是指向你填充它时包含的数据的末尾。

答案 1 :(得分:0)

您显示的错误并不反映您通常会得到的错误。但是,您显示的代码显然是错误的并且会导致错误,因为当您位于光标的起始位置(也就是beforeFirstRow)时,您正尝试读取一行。

您必须先移动到一行才能获取数据。由于您似乎只有一行,因此使用Cursor方法moveToFirst将您定位在第一行(唯一)。如果不能进行移动(没有行)那么就像所有Cursor一样移动?????方法(moveTolastmoveToNext等)返回一个布尔值false(如果移动的话,则返回true)因此它在if中使用。

    SQLiteDatabase db = this.getReadableDatabase();
    String returnString = "";

    Cursor cursor = db.rawQuery("Select * from " + CONTANT_INFO_AND_GPS_TABLE + " where " + KEY_COMPANY_NAME + " = ? ", new String[] {companyNameParamater});

    if (cursor.moveToFirst()) { //<<<< Move the cursor to a row
        company returnCompany = new company(Integer.parseInt(cursor.getString(0)), 
        cursor.getString(1),
        cursor.getString(2), 
        cursor.getString(3),
        Double.parseDouble(cursor.getString(4)),
        Double.parseDouble(cursor.getString(5)));

        /* returnString = ("Company is:\t" + returnCompany.getCompanyName() + ",\nContact name:\t" +
                returnCompany.getContactName() + ",\tContact No:\t" + 
                returnCompany.getContactNumber()
                + ",\nGPS:\tLat:\t"
                + returnCompany.getGPS_Latitude() + "\tLong:\t" + 
                returnCompany.getGPS_Longitude() );
        */
    }

    return returnString;

P.S。 Double.parseDouble(cursor.getString(4))可以是cursor.getDouble(4)