Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 编写查询以删除sqlite中特殊记录的4个首字母_Android_Sql_Sqlite_Android Sqlite - Fatal编程技术网

Android 编写查询以删除sqlite中特殊记录的4个首字母

Android 编写查询以删除sqlite中特殊记录的4个首字母,android,sql,sqlite,android-sqlite,Android,Sql,Sqlite,Android Sqlite,我的原始代码是: c = mydb.rawQuery("select dId,dWord FROM german where dWord like '%" + search + "%'", null); 它返回了完整的记录,如下图所示。 我改变了代码,以遵循代码,但它也有问题 c = mydb.rawQuery("select dId, case when substr(dWord, 1, 4) in ('das ', 'der ','die ') then substr(dWord, 5

我的原始代码是:

 c = mydb.rawQuery("select dId,dWord FROM german where dWord like '%" + search + "%'", null);
它返回了完整的记录,如下图所示。

我改变了代码,以遵循代码,但它也有问题

c = mydb.rawQuery("select dId, case when substr(dWord, 1, 4) in ('das ', 'der ','die ') then substr(dWord, 5, length(dWord) - 4) else dWord end as dWord from german where dWord like '%"+search+"%'",null);
它不显示4个字母,这是好的,但它显示的记录有这个前缀('das','der','die'),它不应该是这样的。它必须返回只包含搜索字符的记录。在照片中,你们可以看到它返回了带有前缀的记录。
在第二个代码之后搜索“das”,它应该返回在其主体上包含das的单词,而不是在删除的前缀上。我希望我能解释清楚

在SQLite中,连接运算符是
|
,而不是
+

也不要直接连接参数
search
,而是使用
占位符并在
rawQuery()的第二个参数处传递
search
。这是避免的安全方法:


如果
WHERE
子句中的
dWord
列是
CASE
表达式的结果,则将语句更改为:

String sql = "select t.* from (select dId, " + 
   "case when substr(dWord, 1, 4) in ('das ', 'der ','die ') " + 
   "then substr(dWord, 5) else dWord end as dWord " +
   "from german) t where t.dWord like '%' || ? || '%' " +
   "order by instr(t.dWord, ?), t.dWord"
c = mydb.rawQuery(sql, new String[] {search, search});

谢谢,但是,它没有改变任何东西,它返回了像第一张照片这样的记录。代码工作正常。检查这个简化的演示:我不能告诉你如何在你的代码中使用它。还有:对于搜索模式
'das'
澄清一些事情:它应该返回在主体上包含das的单词,而不是在删除的前缀上。这是否意味着搜索模式是针对删除4个字符后的dWord的剩余部分?我的英语不是很好,我也解释不清楚。我试图举例说明。我的数据库中有这些词:1-das公寓2-das Gluck 3-die Hand 4-仪表板5-dasselbe 6-alandas 7-皮肤科8-irmander 9-trandie 10-der tisch,运行后查询并过滤这些词('das'),它应该显示以下记录:1-仪表板2-dasselbe 3-alandas或如果我过滤('der'):1-irmander
String sql = "select t.* from (select dId, " + 
   "case when substr(dWord, 1, 4) in ('das ', 'der ','die ') " + 
   "then substr(dWord, 5) else dWord end as dWord " +
   "from german) t where t.dWord like '%' || ? || '%' " +
   "order by instr(t.dWord, ?), t.dWord"
c = mydb.rawQuery(sql, new String[] {search, search});