在Android中使用Join查询

在Android中使用Join查询,android,sqlite,Android,Sqlite,我无法使用此查询获取数据。它工作得很好,我尝试通过SQLManager直接在表上执行它。这是我的密码: 在DatabaseAdapter类中: protected Cursor fetchCustomerInfo() { String Query = "SELECT " + DatabaseConstant.PICKUP_CUSTOMER_DETAIL_TABLE+"."+DatabaseConstant.CUSTOMER_NAME

我无法使用此查询获取数据。它工作得很好,我尝试通过SQLManager直接在表上执行它。这是我的密码: 在DatabaseAdapter类中:

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);
}