Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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 具有唯一字段的RoomDatabase,当值相同时如何处理?_Android_Database - Fatal编程技术网

Android 具有唯一字段的RoomDatabase,当值相同时如何处理?

Android 具有唯一字段的RoomDatabase,当值相同时如何处理?,android,database,Android,Database,在myRoomDatabase中,有一个字段调用用户名,它是唯一的。 当按下保存按钮时,如何检查用户名是否已经存在? 如果存在,则我希望显示警报对话框,该对话框将通知用户。 我可以仅使用名称创建Arraylist,在保存它之前比较值(从edittext到数据库),但我正在寻找更有效的解决方案。 我的意思是,try/catch指令可能会有所帮助?如果已经存在,那么我可以处理错误。您可以在数据库中创建一个方法,该方法将检查用户是否已经存在于数据库中 比如说 @查询(“从您的_表中选择*,其中user

在my
RoomDatabase
中,有一个字段调用用户名,它是唯一的。 当按下
保存按钮
时,如何检查用户名是否已经存在?
如果存在,则我希望显示
警报对话框
,该对话框将通知用户。
我可以仅使用名称创建Arraylist,在保存它之前比较值(从edittext到数据库),但我正在寻找更有效的解决方案。

我的意思是,
try/catch
指令可能会有所帮助?如果已经存在,那么我可以处理错误。

您可以在数据库中创建一个方法,该方法将检查用户是否已经存在于数据库中

比如说

@查询(“从您的_表中选择*,其中user_name=:name”) 乐趣isUserExists(名称:字符串):用户

并且check is函数将返回一些值。
或者你可以编写一个布尔SQL查询来检查用户是否已经存在

我是android的noob,但你可以使用OnConflictStrategy.ABORT anotation,我想你可以使用try Catch。这将对你有所帮助,只需通过替换或更新来使用OnConflictStrategy,根据用户需要,在测试行的存在性后显示对话框(为此创建一个简单查询)。好啊您对使用@Transaction有何看法。这里我发现了一个例子(80票以上)stackoverflow.com/questions/45677230/…问题是我有接口,必须使用静态接口,可以吗?那么,如何将返回的值(我找到的示例)传递给我的活动呢?请用Java代码向我展示一下您的示例,因为我对Kotlin一无所知。此外,布尔SQL查询很有趣,但我无法想象如何做到这一点,如果我认为很好,布尔类型返回值必须位于RoomDatabase的所有类中,如ViewModel、REPOSITORY。如果您没有时间,请仅用java代码显示您的答案。谢谢:D@Query(“SELECT*FROM your_table WHERE user_name=:name”)public user isUserExists(String name)代码工作正常,但我有一个小问题,如何将它用于AsyncTask?因为现在我的代码在MainUI线程中执行。如果我将其置于AsyncTask,布尔值返回null,因为它不等待AsyncTask。我放置新数据的行将在我检查是否存在名称的行之后立即执行。