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