【问题标题】:How to pass two or more selection argument in "query" method如何在“查询”方法中传递两个或多个选择参数
【发布时间】:2020-01-13 13:54:55
【问题描述】:

我正在使用查询方法,但我不知道如何在查询方法中传递多个选择参数。

我的查询方法返回的结果应该和这个 sql 语句一样:

从 CONATCT_TAGS 中选择 _id,其中 TAG1='tagname' 或 TAG2='标记名' 或 TAG3='标记名' 或 TAG4='标记名' 或 TAG5='标记名';

【问题讨论】:

    标签: android


    【解决方案1】:

    如果您想在 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 注入
    • 有人用过这个吗?当我尝试时,它会留下'?在所有字段中,而不是在我的 args 中替换。
    【解决方案2】:

    试试类似的东西..

    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 将 返回给定表的所有行。

    【讨论】:

      【解决方案3】:

      你可以这样使用它

      字符串 strSelection = android.provider.CallLog.Calls.TYPE + " = " + CallLog.Calls.MISSED_TYPE+ " OR " + android.provider.CallLog.Calls.TYPE + " = " + CallLog.Calls.INCOMING_TYPE ;

      【讨论】:

        【解决方案4】:

        试试这个,这段代码我使用媒体存储获取所有文档文件,使用带有多个参数的单个查询。

         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 
        
        
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多