问题
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