让我们假设,我们在 SQLite 中有一些 2 个表:TBL_PRODUCT
和TBL_PRODUCT_ALIASES
. 现在,我想从连接的两个表中查询一些数据:
String sql = "SELECT " + TBL_PRODUCT + "." + C_PROD_PKEY_ID + ", " + TBL_PRODUCT_ALIASES + "." + C_PROD_ALIASES_PKEY_ID +
" FROM " + TBL_PRODUCT + " LEFT JOIN " + TBL_PRODUCT_ALIASES + " ON " + TBL_PRODUCT + "." + C_PROD_PKEY_ID + " = " + TBL_PRODUCT_ALIASES + "." + C_PROD_ALIASES_PKEY_ID +
" WHERE " + C_PROD_SERVER_ID + " = ? LIMIT 1";
Cursor cursor = SQLiteDataHelper.getInstance().rawQuery(sql, new String[] {"" + js_CartProduct.getLong("prod_id")});
那很好用,没有任何问题。然后我想从返回的游标中获取一些数据:
if (cursor.getCount() > 0) {
cursor.moveToFirst();
Long prodId = cursor.getLong(cursor.getColumnIndexOrThrow(TBL_PRODUCT + "." + C_PROD_PKEY_ID));
//... Some other code
}
现在,问题来了:C_PROD_PKEY_ID
并且C_PROD_ALIASES_PKEY_ID
在现实世界中是相同的 Strings: "_id"
。并且由于结果getLong()
返回 long 而不是来自所需的cursor
.
我应该如何正确寻址到所需的列?AS
除了在 sql 查询中使用 OR/AND 使用确定的数字cursor.getLong(0)
代替之外,还有其他方法cursor.getLong(cursor.getColumnIndexOrThrow(TBL_PRODUCT + "." + C_PROD_PKEY_ID))
吗?
更新:
cursor.getColumnNames()
返回这个:[_id, _id]
。