【发布时间】:2020-01-13 13:54:55
【问题描述】:
我正在使用查询方法,但我不知道如何在查询方法中传递多个选择参数。
我的查询方法返回的结果应该和这个 sql 语句一样:
从 CONATCT_TAGS 中选择 _id,其中 TAG1='tagname' 或 TAG2='标记名' 或 TAG3='标记名' 或 TAG4='标记名' 或 TAG5='标记名';【问题讨论】:
标签: android
我正在使用查询方法,但我不知道如何在查询方法中传递多个选择参数。
我的查询方法返回的结果应该和这个 sql 语句一样:
从 CONATCT_TAGS 中选择 _id,其中 TAG1='tagname' 或 TAG2='标记名' 或 TAG3='标记名' 或 TAG4='标记名' 或 TAG5='标记名';【问题讨论】:
标签: android
如果您想在 Android SQLite 连接中使用内置优化,您可以这样做:
String table = "CONTACT_TAGS";
String[] columns = {"_id"};
String where = "TAG1=? OR TAG2=? OR TAG3=? OR TAG4=? OR TAG5=?";
String[] args = {"tagname", "tagname", "tagname", "tagname", "tagname"};
SQLiteDatabase db = myDatabaseHelper.getReadableDatabase();
Cursor cursor = db.query(table, columns, where, args, null, null, null);
与@raultum 解决方案的不同之处在于您让数据库连接器决定如何解释提交的数据。从安全角度来看,这非常有趣。
【讨论】:
args 参数来避免 SQL 注入
试试类似的东西..
SQLiteDatabase db = YourDatabaseHelper.getReadableDatabase();
String TABLE = "CONTACT_TAGS";
String[] FIELDS = { "_id" };
String WHERE = "TAG1='tagname' OR TAG2='tagname' OR TAG3='tagname' OR TAG4='tagname' OR TAG5='tagname' ";
// Execute
cursor = db.query(TABLE, FIELDS, WHERE, null, null, null, null);
如果您阅读Cursor.query() 方法的文档,您会发现selection 的定义如下:
selection:一个过滤器,声明要返回的行,格式为 SQL WHERE 子句(不包括 WHERE 本身)。传递 null 将 返回给定表的所有行。
【讨论】:
你可以这样使用它
字符串 strSelection = android.provider.CallLog.Calls.TYPE + " = " + CallLog.Calls.MISSED_TYPE+ " OR " + android.provider.CallLog.Calls.TYPE + " = " + CallLog.Calls.INCOMING_TYPE ;
【讨论】:
试试这个,这段代码我使用媒体存储获取所有文档文件,使用带有多个参数的单个查询。
String pdf = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pdf");
String doc = MimeTypeMap.getSingleton().getMimeTypeFromExtension("doc");
String docx = MimeTypeMap.getSingleton().getMimeTypeFromExtension("docx");
String xls = MimeTypeMap.getSingleton().getMimeTypeFromExtension("xls");
String xlsx = MimeTypeMap.getSingleton().getMimeTypeFromExtension("xlsx");
String ppt = MimeTypeMap.getSingleton().getMimeTypeFromExtension("ppt");
String pptx = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pptx");
String txt = MimeTypeMap.getSingleton().getMimeTypeFromExtension("txt");
String rtx = MimeTypeMap.getSingleton().getMimeTypeFromExtension("rtx");
String rtf = MimeTypeMap.getSingleton().getMimeTypeFromExtension("rtf");
String html = MimeTypeMap.getSingleton().getMimeTypeFromExtension("html");
//Table
Uri table = MediaStore.Files.getContentUri("external");
//Column
String[] column = {MediaStore.Files.FileColumns.DATA};
//Where
String where = MediaStore.Files.FileColumns.MIME_TYPE + "=?"
+" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?"
+" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?"
+" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?"
+" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?"
+" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?"
+" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?"
+" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?"
+" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?"
+" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?"
+" OR " +MediaStore.Files.FileColumns.MIME_TYPE + "=?";
//args
String[] args = new String[]{pdf,doc,docx,xls,xlsx,ppt,pptx,txt,rtx,rtf,html};
Cursor fileCursor = getActivity().getContentResolver().query(table, column, where, args, null);
while (fileCursor.moveToNext()) {
//your code
}
【讨论】: