【发布时间】:2018-01-09 09:26:58
【问题描述】:
我尝试通过连接三个表来查询前提列表。但是,当我添加 WHERE 时,我的列表返回空。我试图记录所有内容..似乎没有它,我能够获得前提列表......但这是错误的。我尝试在 DB Browser for sqlite 上运行查询,它设法运行并返回正确的列表。请帮帮我。
这是我的查询代码..
public List<TXN_Premise> getTxnTableData(String tableName, String columnName) {
ArrayList<TXN_Premise> itemList = new ArrayList<>();
String selectQuery = "SELECT "
+ Constants.COLUMN_PREMISE_REF + ", "
+ Constants.COLUMN_PREMISE_NAME + ", "
+ Constants.COLUMN_PREMISE_ADDRESS + ", "
+ Constants.REF_PREMISE_CATEGORY_TABLE + "." + Constants.COLUMN_PREMISE_CATEGORY_ID + " AS " + Constants.COLUMN_FK_PREMISE_CATEGORY_ID +", "
+ Constants.REF_PREMISE_CATEGORY_MASTER_TABLE + "." + Constants.COLUMN_PREMISE_CATEGORY_MASTER_ID + " AS " + Constants.COLUMN_FK_PREMISE_CATEGORY_MASTER_ID + ", "
+ Constants.COLUMN_PREMISE_REG_NO + ", "
+ Constants.COLUMN_PREMISE_REG_DATE + ", "
+ Constants.REF_PREMISE_CATEGORY_TABLE + "." + Constants.COLUMN_DESCRIPTION + " AS premiseCategoryDescription, "
+ Constants.REF_PREMISE_CATEGORY_MASTER_TABLE + "." + Constants.COLUMN_DESCRIPTION + " AS premiseCategoryMasterDescription "
+ " FROM " + tableName
+ " LEFT JOIN " + Constants.REF_PREMISE_CATEGORY_MASTER_TABLE + " ON " +
Constants.TXN_PREMISE_TABLE + "." + Constants.COLUMN_FK_PREMISE_CATEGORY_MASTER_ID + " = " + Constants.REF_PREMISE_CATEGORY_MASTER_TABLE + "." + Constants.COLUMN_CODE
+ " LEFT JOIN " + Constants.REF_PREMISE_CATEGORY_TABLE + " ON " +
Constants.TXN_PREMISE_TABLE + "." + Constants.COLUMN_FK_PREMISE_CATEGORY_ID + " = " + Constants.REF_PREMISE_CATEGORY_TABLE + "." + Constants.COLUMN_CODE
// + " WHERE " + Constants.REF_PREMISE_CATEGORY_TABLE + "." + Constants.COLUMN_LANG + " = 'MYS'"
// + Constants.REF_PREMISE_CATEGORY_MASTER_TABLE + "." + Constants.COLUMN_LANG + " = 'MYS' AND "
// + Constants.COLUMN_PREMISE_NAME + " <> '-' AND " + Constants.COLUMN_PREMISE_NAME + " <> '-TIADA-'"
+ " ORDER BY " + columnName + " ASC LIMIT 3";
Log.d("test", "getTxnTableData: " + selectQuery);
try {
open();
//make sure the database is not empty
if (sqLiteDatabase != null) {
//get a cursor for all state in the database
Cursor cursor = sqLiteDatabase.rawQuery(selectQuery, null);
Log.d("test", "getTxnTableData: cursor " + cursor.toString());
Log.d("test", "getTxnTableData: outside");
if (cursor.moveToFirst()) {
while (!cursor.isAfterLast()) {
TXN_Premise premiseColumn = new TXN_Premise();
// premiseColumn.setPremiseId(cursor.getString(0));
premiseColumn.setPremiseRef(cursor.getString(cursor.getColumnIndex(Constants.COLUMN_PREMISE_REF)));
premiseColumn.setPremiseName(cursor.getString(cursor.getColumnIndex(Constants.COLUMN_PREMISE_NAME)));
premiseColumn.setPremiseAddress(cursor.getString(cursor.getColumnIndex(Constants.COLUMN_PREMISE_ADDRESS)));
premiseColumn.setFk_premiseCategoryId(cursor.getString(cursor.getColumnIndex(Constants.COLUMN_FK_PREMISE_CATEGORY_ID)));
premiseColumn.setFk_premiseCategoryMasterId(cursor.getString(cursor.getColumnIndex(Constants.COLUMN_FK_PREMISE_CATEGORY_MASTER_ID)));
premiseColumn.setPremiseRegNo(cursor.getString(cursor.getColumnIndex(Constants.COLUMN_PREMISE_REG_NO)));
premiseColumn.setPremiseRegDate(cursor.getString(cursor.getColumnIndex(Constants.COLUMN_PREMISE_REG_DATE)));
// todo: temp premise category description
premiseColumn.setPremiseCategoryName(cursor.getString(cursor.getColumnIndex("premiseCategoryDescription")));
premiseColumn.setPremiseCategoryMasterName(cursor.getString(cursor.getColumnIndex("premiseCategoryMasterDescription")));
Log.d("test", "getTxnTableData: premiseName " + cursor.getString(cursor.getColumnIndex(Constants.COLUMN_PREMISE_NAME)));
//add premiseColumn in the cursor
itemList.add(premiseColumn);
cursor.moveToNext();
}
}
cursor.close();
}
close();
} catch (SQLException e) {
e.printStackTrace();
}
Log.d("test", "getTxnTableData: itemlist " + itemList.size() );
return itemList;
}
【问题讨论】:
-
你是从光标处获取数据吗...
-
不同的查询,或者不同的数据。
-
我将光标数据传递给一个数组..
标签: android mysql sqlite android-cursor