簡體   English   中英

ListView中的Android SQLITE數據庫聯接表

[英]Android SQLITE database join tables in ListView

我的sqlite android數據庫中有3個表:

ToolTable
---------
_id
serialNumber
TorqueRange._id

TorqueRangeTable
----------------
_id
min
max
TorqueUnit._id

TorqueUnitTable
---------------
id
name
toNmFactor

我需要使用CursorAdapter來顯示工具的ListView,但是似乎我有多種選擇來公開數據:

  • 使用我的ContentProvider返回帶有我需要的所有列的游標:_id,serialNumber,minTorque,maxTorque,torqueUnitName
  • 僅返回ToolTable列,然后在每個行視圖中提出一個新請求以獲取id為_id,serialNumber,TorqueRange._id的TorqueRange,並在TorqueRangeTextView中獲取_id,min,max,TorqueUnit._id

做到這一點的最佳方法是什么? 進行連接似乎很容易,但是之后,我的ContentProvider返回了很多我不需要的列。 在自定義組件視圖內發出請求會更多地考慮數據庫的結構,但是我不知道發出大量請求是否是一個好主意。

謝謝你的燈

好的@zozelfelfo,我根據您的要求選擇了第一個選項:

我創建了內容提供商和UriMatcher:

private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
private static final HashMap<String,String> TOOL_PROJECTION_MAP = new HashMap<String,String>();

private static final String TOOL_TABLES = "Tool AS T LEFT JOIN " +
                                          "TorqueRange AS TR ON TR._id = T.TorqueRange_id " +
                                          "TorqueUnit AS TU ON TU._id = TR.TorqueUnit_id";

public static final String KEY_TOOL_ID = "_id";
public static final String KEY_TOOL_SERIAL_NUMBER = "serialNumer";
public static final String KEY_TOOL_MIN_TORQUE = "minTorque";
public static final String KEY_TOOL_MAX_TORQUE = "maxTorque";
public static final String KEY_TOOL_TORQUE_UNIT_NAME = "torqueUnitName";

private static final int TOOLS = 1;
private static final int TOOLS_ID = 2;

static{
  sUriMatcher.add(AUTHORITY,"tools",TOOLS);
  sUriMatcher.add(AUTHORITY,"tools/#",TOOLS_ID);
  TOOL_PROJECTION_MAP.put(KEY_TOOL_ID,"T._id AS T._id");
  TOOL_PROJECTION_MAP.put(KEY_TOOL_SERIAL_NUMBER,"T.serialNumber AS T.serialNumber");
  TOOL_PROJECTION_MAP.put(KEY_TOOL_MIN_TORQUE,"TR.min AS TR.min");
  TOOL_PROJECTION_MAP.put(KEY_TOOL_MAX_TORQUE,"TR.max AS TR.max");
  TOOL_PROJECTION_MAP.put(KEY_TOOL_TORQUE_UNIT_NAME,"TU.name AS TU.name");
}

在這一行中,我可以查詢所有帶有torqueRange數據的工具,並在CursorAdapter中顯示它們,但是當我需要插入新行時,我不能將insert(...)與“ content://” + AUTHORITY +“ tools /”一起使用,因為我還需要插入一個新的TorqueRange行。

是否可以將我的內容uri“ content://” + AUTHORITY +“ tools /”替換為content://“ + AUTHORITY +” toolsWithTorqueRange /“以在CursorAdapter中查詢,並使用” content://“ + AUTHORITY +用於插入KEYS的“工具/”:(KEY_TOOL_ID,KEY_TOOL_SERIAL_NUMBER,KEY_TOOL_TORQUE_RANGE_ID)?

還是有其他選擇?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM