我的sqlite android数据库中有3个表:
ToolTable
---------
_id
serialNumber
TorqueRange._id
TorqueRangeTable
----------------
_id
min
max
TorqueUnit._id
TorqueUnitTable
---------------
id
name
toNmFactor
我需要使用CursorAdapter来显示工具的ListView,但似乎我有多种选择来公开数据:
实现这一目标的最佳方法是什么? 使连接看起来很简单,但之后我的ContentProvider返回了很多我不想每次都需要的列。 在自定义组件视图中发出请求更多地考虑了数据库的结构,但我不知道提出大量请求是否是个好主意。
感谢你的灯光
答案 0 :(得分:0)
好的@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 +“工具一起使用/“因为我还需要插入一个新的TorqueRange行。
将内容uri“content://”+ AUTHORITY +“tools /”替换为内容://“+ AUTHORITY +”toolsWithTorqueRange /“以在CursorAdapter中查询,并使用”content:// “+ AUTHORITY +”工具/“用于插入KEYS:(KEY_TOOL_ID,KEY_TOOL_SERIAL_NUMBER,KEY_TOOL_TORQUE_RANGE_ID)?
或者有不同的选择吗?