如何在android房间数据库sql中使用replace?

如何在android房间数据库sql中使用replace?,android,android-room,Android,Android Room,我正在使用房间数据库,这是我的代码 我发现运行时该代码的格式不正确,android studio提示我:expression expected,Get'replace' 像这样 我想达到这样的效果 ----路径----------------路径 /根/1/1-----------------/stack/1/1 /root/name/1------/stack/name/1 /root/cls/1------/stack/cls/1 /根目录/go/1------/stack/go/1 /r

我正在使用房间数据库,这是我的代码

我发现运行时该代码的格式不正确,android studio提示我:expression expected,Get'replace'

像这样

我想达到这样的效果

----路径----------------路径

/根/1/1-----------------/stack/1/1

/root/name/1------/stack/name/1

/root/cls/1------/stack/cls/1

/根目录/go/1------/stack/go/1

/root/js/1------/stack/js/1


替换
是一个字符串函数名,在您的预期用途中,它是一个字符串函数名:。 房间注释处理器似乎拒绝您的查询字符串,因为它将
replace
视为关键字而不是函数名。也许是虫子

一些快速的实验表明,一种可能的解决方案是将
replace
环绕在背景标记中,以将is标记为名称(参见上面的关键字链接)。请试一试:

    @Query("update bookmarks set bookmarks_path= replace(bookmarks_path,:oldPath,:newPath) where bookmarks_path like :oldPath || '%'")
    fun updateBookmarksPath(oldPath: String, newPath: String): Completable


REPLACE
既是字符串函数的名称,在您的预期用途中,也是字符串函数的名称:。 房间注释处理器似乎拒绝您的查询字符串,因为它将
replace
视为关键字而不是函数名。也许是虫子

一些快速的实验表明,一种可能的解决方案是将
replace
环绕在背景标记中,以将is标记为名称(参见上面的关键字链接)。请试一试:

    @Query("update bookmarks set bookmarks_path= replace(bookmarks_path,:oldPath,:newPath) where bookmarks_path like :oldPath || '%'")
    fun updateBookmarksPath(oldPath: String, newPath: String): Completable


我不明白为什么要在sql语句中执行字符串操作。我不会同意的。事实上,room并不支持所有的SQL语句。可能
replace
就是其中之一。如果我在代码中修改它,我需要搜索所有匹配的数据,修改它们,然后在数据库中再次修改它们,使用这个方法可以直接修改它们,这个SQL可以执行,虽然错误仍然存在,我想这可能是SQL语法的修正,但不影响代码执行正如Bob Snyder所提到的,它与backtick一起工作。我不明白为什么要在sql语句中执行字符串操作。我不会同意的。事实上,room并不支持所有的SQL语句。可能
replace
就是其中之一。如果我在代码中修改它,我需要搜索所有匹配的数据,修改它们,然后在数据库中再次修改它们,使用这个方法可以直接修改它们,这个SQL可以执行,虽然错误仍然存在,我想这可能是SQL语法的修正,但不影响代码执行正如Bob Snyder提到的,它与backticksThanks一起工作以获得答案,使用此方法时,错误是:查询有问题:[SQLITE_error]SQL错误或缺少数据库(靠近)(“:语法错误”),我尝试在不修改任何内容的情况下运行,它可以成功运行,并且可以达到我想要的效果,尽管他提示错误,但它仍然可以构建。请编辑您的问题,以包括修改后的查询字符串(带背景标记)以及所有错误输出。您确定错误是针对此查询的吗?我在回答中包含的语法是有效的。我使用sqlite3对其进行了测试,没有发现错误。另外,请注意,在
replace
周围添加的字符是反勾号(ASCII代码96)不是单引号。我认为您输入了单引号。谢谢,您是对的,我太粗心了,修改后的sql将正常运行,我使用的单引号是错误的,您的答案已被采纳。感谢您的回答,使用此方法时,错误是:查询有问题:[SQLITE_error]sql错误或缺少数据库(近)(“:syntax error),我尝试在不修改任何内容的情况下运行,它可以成功运行,并且可以达到我想要的效果,尽管他提示了一个错误,但它仍然可以构建。请编辑您的问题,以包括修改后的查询字符串(带反勾)以及所有错误输出。您确定错误是针对此查询的吗?我在回答中包含的语法是有效的。我使用sqlite3对其进行了测试,没有发现错误。另外,请注意,在
replace
周围添加的字符是反勾号(ASCII代码96)不是单引号。我想你输入了单引号。谢谢,你是对的,我太粗心了,修改后的sql会正常运行,我使用的单引号是错误的,你的答案已经被采纳了。