2014-06-18 56 views
1

我無法使用此查詢獲取數據。它工作正常,我嘗試通過SQLManager直接在表上執行它。這裏是我的代碼: 在DatabaseAdapter類:在Android中使用Join Query

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; 

}

,並通過調用它:

allCustomerArraylist = dbController.fetchCustomerInfo(rootView.getContext()); 

顯示錯誤:

 Failed to read row 0, column -1 from a CursorWindow which has 3 rows, 9 columns. 
+0

貼上的你當你打從你的應用程序此查詢的日誌。 – Dev

+0

SQLManager中的結果列名稱是什麼? –

+0

當我運行它通過sqlmanager它給出了所需的答案。但是這裏的數組列表是空白的 – user3740085

回答

0

如果您想稍後訪問它的值,則還需要選擇字段DatabaseConstant.CUSTOMER_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); 
}