我有一个奇怪的问题。我从服务器获取数据并将其插入表中。插入后,我使用两个表之间的内部联接查询该数据。 这是我的疑问:
Select
F._id, F.id, F.logo, F.total_like, F.distance, F.store_name, F.mob_no_1,
F.mob_no_2, F.mob_no_3, F.tel_no_1, F.tel_no_2, F.tel_no_3, F.description,
R.total_record, R.total_page, R.current_page
from
FAVOURITE_STORES as F
INNER JOIN FAVOURITE_RECORDS as R on F.area_id = R.area_id
where
F.area_id = 2 and
R.area_id = 2
我在某些设备上将游标数量设置为1,在某些设备上,我将游标数量设置为零。即使表格中有数据。
这是我的选择查询功能
public Cursor rawQuery(String sQuery,String[] selectionArgs) {
if(mDatabase == null) {
mDatabase = getWritableDatabase();
}
debug("Query "+sQuery);
return mDatabase.rawQuery(sQuery,selectionArgs);
}
光标类
public class ExampleCursorLoader extends CursorLoader {
private Activity mActivity;
private String msQuery;
private DBUtil mDbUtil;
private String[] mSelectionArgs;
public ExampleCursorLoader(Activity context, String query,String[] selectionArgs) {
super(context);
this.mActivity = context;
this.msQuery = query;
this.mSelectionArgs = selectionArgs;
this.mDbUtil = DBUtil.getInstance(mActivity.getApplicationContext());
}
public ExampleCursorLoader(Activity context, String query) {
this(context,query,null);
debug(query);
}
public Cursor loadInBackground() {
debug("Loading in Background");
Cursor cursor=null;
cursor = mDbUtil.rawQuery(msQuery,mSelectionArgs);
return cursor;
}
private void debug(String s) {
Log.v("Adapter " , "Adapter " + s);
}
protected void onStartLoading() {
forceLoad();
debug("Started Loading");
}
protected void onStopLoading() {
super.onStopLoading();
}
}
这就是我的称呼方式。
return new ExampleCursorLoader(mActivity,sQuery);
计数为1的设备是三星s3。三星是Grand。 对此有任何想法或建议吗?
答案 0 :(得分:1)
计数为1的设备是三星s3。三星是Grand。 对此有任何想法或建议吗?
这种问题难以解释,因为它很可能不会引发任何错误,只会显示不同且不需要的结果。
您所能做的就是“改善查询”:
首先使用占位符而不是原始语句:
String query = "... where F.area_id = ? and R.area_id = ?";
String[] whereArgs = {"2", "2"};
此外,您不需要使用AS
子句,只需说:
... from FAVOURITE_STORES F INNER JOIN FAVOURITE_RECORDS R on ...
从您提供的代码看起来是正确的(查询和rawQuery()的用法)。
答案 1 :(得分:0)
在我看来,WHERE子句的最后一部分是不必要的:
and R.area_id=2
您已经为FAVOURITE_STORES表指定了与area_id = 2匹配的行。当在该列上执行INNER JOIN时,它将仅返回FAVOURITE_RECORDS中的行,其中area_id列与FAVOURITE_STORES的area_id列匹配。
我不确定SQLite引擎如何处理这个问题,但值得一试。