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 移动一样?????方法(moveTolast
、moveToNext
等)返回一个布尔值 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)
我目前正在做一个 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 移动一样?????方法(moveTolast
、moveToNext
等)返回一个布尔值 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)