android sqlite and regular expressions

怎甘沉沦 提交于 2020-01-23 17:48:06

问题


I need to select the query from the database all the names that begin with the letter or letters, but without the letter "x".

For some titles that now exists in the following code(It's slow but it works):

 String qstr = "SELECT SUM("+SQLhelper.COL_COUNT +") FROM " 
               + SQLhelper.TABLE_MYDETAILS + " WHERE " +        
                         SQLhelper.COL_DETAILID + " LIKE 'sh%'" + 
                " or " + SQLhelper.COL_DETAILID + " LIKE 'sw%'" +
                " or " + SQLhelper.COL_DETAILID + " LIKE 'cty%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'twn%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'tlm%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'sp%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'rac%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'frnd%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'elf%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'pm%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'cas%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'oct%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'hp%'"+    
                " or " + SQLhelper.COL_DETAILID + " LIKE 'njo%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'loc%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'stu%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'iaj%'"+ 
                " or " + SQLhelper.COL_DETAILID + " LIKE 'tlr%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'lor%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'ovr%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'tnt%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'pi%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'idea%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'min%'"+
                " or " + SQLhelper.COL_DETAILID + " LIKE 'trn%'"; 
    Cursor allc = db.rawQuery(qstr, null);          
    allc.moveToFirst();        
    int cnt = allc.getInt(0);
    if(cnt==0) {
        Toast.makeText(this, getResources().getString( R.string.myminifigsnotfound ), Toast.LENGTH_LONG).show();
        return;
    }
    allc.close();

When I add other names must be added to the query string. I tried to do so, using regular expressions:

 sql = "SELECT " + SQLhelper.COL_DETAILID + "," + SQLhelper.COL_COUNT 
      + " FROM " + SQLhelper.TABLE_INSTRUCTIONS 
     + " where " +SQLhelper.TABLE_INSTRUCTIONS_SETID + "="+setid 
       + " and "+ SQLhelper.COL_DETAILID +" LIKE '[a-wyz]%'";

But it does not work, it returns an empty query. How to do it?


回答1:


Maybe it's a little bit late to answer this question , but I put it here for people who may face the same problem later. For using REGEXP operator in Android's Sqlite you can use the library SqliteRE :

https://github.com/mobi-life/sqlitere

It also supports optional feature for encrypting data if you want.




回答2:


As far as I remember regular expressions (REGEXP) are one of the few things that are not supported in SQLite on Android. There are just some placeholders that work with LIKE, these are % and _.

What you could do instead is, turn your query:

SELECT SUM("+SQLhelper.COL_COUNT +")
  FROM SQLhelper.TABLE_MYDETAILS
 WHERE INSTR ('sh|sw|...',   SUBSTR(SQLhelper.COL_DETAILID, 1, 2)) > 0
    OR INSTR ('cty|twn|...', SUBSTR(SQLhelper.COL_DETAILID, 1, 3)) > 0;


来源:https://stackoverflow.com/questions/28772467/android-sqlite-and-regular-expressions

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!