我有一张列入黑名单的蓝牙设备表,需要确保我的设备没有配对。列入黑名单的设备存储在通过内容提供商访问的数据库中。
哪种方法更好?
IN
子句,然后查询一次数据。 IN
子句可能包含很多值。例如。 SELECT _id FROM blacklisted_devices WHERE mac_address IN ('01:23:45:67:89:ab', ' ab:23:45:67:89:df') OR device_name IN ('Lorem', 'Ipsum')
我在其中使用for循环和查询数据。
Set<BluetoothDevice> bondedDevices = BluetoothAdapter.getDefaultAdapter().getBondedDevices();
Cursor cursor = null;
for (BluetoothDevice device : bondedDevices) {
cursor = getContentResolver().query(Uris.BLUETOOTH,
new String[] { Columns._ID },
Columns.DEVICE_NAME + "=? OR " + Columns.MAC_ADDRESS + "=?",
new String[] { device.getName(), device.getAddress() },
null);
if (cursor.getCount() > 0) {
// Unpair
}
}
答案 0 :(得分:1)
如果要检查的值列表存储在与黑名单表相同的数据库中,那么最快最简单的方法是直接比较它们:
SELECT _id
FROM blacklisted_devices
WHERE mac_address IN (SELECT mac_address FROM my_list)
...
但是,这不是这种情况;如果您有权访问数据库,则不需要内容解析器。
将多个值与IN子句进行比较要快得多。 只要您不超过database limits中的一个,这应该是首选。