Android SQLite 游标错误

Android SQLite error on cursor

我目前正在做一个 android 项目,并且一直坚持使用这种方法。游标查询有效,但之后的任何内容都无效。如果我取出它运行的 'returnCompany' 方法,那么我猜错误是在游标查询中。该方法接受一个名为 '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

尝试使用

cursor.moveToFirst()

在创建并用 db.rawquery 或您用来从数据库中获取数据的任何调用填充之后,

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

您显示的错误并不反映您通常会遇到的错误。但是,您显示的代码显然是错误的,并且会导致错误,因为当您位于光标的起始位置(又名 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)