在Android中使用Join查询
我无法使用此查询获取数据。它工作得很好,我尝试通过SQLManager直接在表上执行它。这是我的密码: 在DatabaseAdapter类中:在Android中使用Join查询,android,sqlite,Android,Sqlite,我无法使用此查询获取数据。它工作得很好,我尝试通过SQLManager直接在表上执行它。这是我的密码: 在DatabaseAdapter类中: protected Cursor fetchCustomerInfo() { String Query = "SELECT " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_NAME
protected Cursor fetchCustomerInfo() {
String Query = "SELECT "
+ DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_NAME
+ ", " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_CONTACT
+ ", " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_ADDRESS
+ ", " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_EMAIL
+ ", " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.PICKUP_PRIORITY_ID
+ ", " + DatabaseConstant.PICKUP_ITEM_DETAIL_TABLE+"."+DatabaseConstant.ITEM_TYPE
+ ", " + DatabaseConstant.PICKUP_ITEM_DETAIL_TABLE+"."+DatabaseConstant.ITEM_TYPE_ID
+ ", " + DatabaseConstant.PICKUP_ITEM_DETAIL_TABLE+"."+DatabaseConstant.ITEM_SERIAL
+ ", " + DatabaseConstant.PICKUP_ITEM_DETAIL_TABLE+"."+DatabaseConstant.PICKUPITEM_ID
+ " FROM " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE
+ " INNER JOIN " + DatabaseConstant.PICKUP_ITEM_DETAIL_TABLE
+ " ON " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_ACCODE
+ " = "+ DatabaseConstant.PICKUP_ITEM_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_ACCODE;
Log.i("Join Customer and item", Query);
return database.rawQuery(Query, null);
}
在DatabaseController类中:
public ArrayList<CustomerInfo> fetchCustomerInfo(Context context) {
DatabaseAdapter dbAdapter = null;
ArrayList<CustomerInfo> model = new ArrayList<CustomerInfo>();
Cursor cursor = null;
try {
dbAdapter = new DatabaseAdapter(context).open();
cursor = dbAdapter.fetchCustomerInfo();
if (cursor.moveToFirst()) {
while (!cursor.isAfterLast()) {
String name = cursor.getString(cursor
.getColumnIndex(DatabaseConstant.CUSTOMER_NAME));
String contactNumber = cursor.getString(cursor
.getColumnIndex(DatabaseConstant.CUSTOMER_CONTACT));
String customerAddress = cursor.getString(cursor
.getColumnIndex(DatabaseConstant.CUSTOMER_ADDRESS));
String customerEmail = cursor.getString(cursor
.getColumnIndex(DatabaseConstant.CUSTOMER_EMAIL));
int pickupPriorityId = cursor.getInt(cursor
.getColumnIndex(DatabaseConstant.PICKUP_PRIORITY_ID));
String itemType = cursor.getString(cursor
.getColumnIndex(DatabaseConstant.ITEM_TYPE));
String itemSerial = cursor.getString(cursor
.getColumnIndex(DatabaseConstant.ITEM_SERIAL));
int itemTypeId = cursor.getInt(cursor
.getColumnIndex(DatabaseConstant.ITEM_TYPE_ID));
int pickupItemId = cursor.getInt(cursor
.getColumnIndex(DatabaseConstant.PICKUPITEM_ID));
int customerAcc = cursor.getInt(cursor
.getColumnIndex(DatabaseConstant.CUSTOMER_ACCODE));
CustomerInfo customer = new CustomerInfo(name, contactNumber, customerAddress, customerEmail, pickupPriorityId, itemType, itemSerial, itemTypeId, pickupItemId, customerAcc);
model.add(customer);
cursor.moveToNext();
}
}
cursor.close();
dbAdapter.close();
} catch (Exception e) {
try {
cursor.close();
dbAdapter.close();
} catch (Exception e2) {
}
}
return model;
显示错误:
Failed to read row 0, column -1 from a CursorWindow which has 3 rows, 9 columns.
如果以后要访问其值,还需要选择DatabaseConstant.CUSTOMER\u ACCODE字段 因此,这应该是可行的:
protected Cursor fetchCustomerInfo() {
String Query = "SELECT "
+ DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_NAME
+ ", " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_CONTACT
+ ", " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_ADDRESS
+ ", " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_EMAIL
+ ", " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_ACCODE
+ ", " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.PICKUP_PRIORITY_ID
+ ", " + DatabaseConstant.PICKUP_ITEM_DETAIL_TABLE+"."+DatabaseConstant.ITEM_TYPE
+ ", " + DatabaseConstant.PICKUP_ITEM_DETAIL_TABLE+"."+DatabaseConstant.ITEM_TYPE_ID
+ ", " + DatabaseConstant.PICKUP_ITEM_DETAIL_TABLE+"."+DatabaseConstant.ITEM_SERIAL
+ ", " + DatabaseConstant.PICKUP_ITEM_DETAIL_TABLE+"."+DatabaseConstant.PICKUPITEM_ID
+ " FROM " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE
+ " INNER JOIN " + DatabaseConstant.PICKUP_ITEM_DETAIL_TABLE
+ " ON " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_ACCODE
+ " = "+ DatabaseConstant.PICKUP_ITEM_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_ACCODE;
Log.i("Join Customer and item", Query);
return database.rawQuery(Query, null);
}
粘贴从应用程序点击此查询时得到的日志。SQLManager中的结果列名是什么?当我通过SQLManager运行它时,它会给出所需的答案。但这里是arraylistblank@CL.对于delete查询,必须使用db.execQuery或db.rawQuery;
protected Cursor fetchCustomerInfo() {
String Query = "SELECT "
+ DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_NAME
+ ", " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_CONTACT
+ ", " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_ADDRESS
+ ", " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_EMAIL
+ ", " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_ACCODE
+ ", " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.PICKUP_PRIORITY_ID
+ ", " + DatabaseConstant.PICKUP_ITEM_DETAIL_TABLE+"."+DatabaseConstant.ITEM_TYPE
+ ", " + DatabaseConstant.PICKUP_ITEM_DETAIL_TABLE+"."+DatabaseConstant.ITEM_TYPE_ID
+ ", " + DatabaseConstant.PICKUP_ITEM_DETAIL_TABLE+"."+DatabaseConstant.ITEM_SERIAL
+ ", " + DatabaseConstant.PICKUP_ITEM_DETAIL_TABLE+"."+DatabaseConstant.PICKUPITEM_ID
+ " FROM " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE
+ " INNER JOIN " + DatabaseConstant.PICKUP_ITEM_DETAIL_TABLE
+ " ON " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_ACCODE
+ " = "+ DatabaseConstant.PICKUP_ITEM_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_ACCODE;
Log.i("Join Customer and item", Query);
return database.rawQuery(Query, null);
}