gpt4 book ai didi

java - 如何处理内容提供​​程序内的 SQLiteConstraintException

转载 作者:太空宇宙 更新时间:2023-11-04 14:13:03 26 4
gpt4 key购买 nike

我正在使用内容提供程序从数据库中读取/写入,该数据库允许用户组织处方。目前,我正在实现一个 DialogFragment,允许用户输入新药物。该对话框包含两个 EditText,一个用于强度,一个用于药物名称。

该表的设计使(名称,强度)成为唯一键。这是我的插入方法:

public Uri insert(Uri uri, ContentValues values) {
final SQLiteDatabase db = mOpenHelper.getReadableDatabase();
final int match = sUriMatcher.match(uri);
long _id; // Value used for inserts.
Uri returnUri;

switch(match){
case MEDICATION:
_id = db.insert(PMContract.MedicationEntry.TABLE_NAME, null, values);
if(_id > 0)
returnUri = PMContract.MedicationEntry.buildMedicationUri(_id);
else
throw new UnsupportedOperationException("Failed to insert row into: " + uri);
break;
default:
throw new UnsupportedOperationException("Unknown uri: " + uri);
}

正如您所猜测的,如果用户输入的名称和强度已经存在,则会发生 SQLiteConstraintException。然而,我在这里所做的只是抛出一个 UnsupportedOperationException,这是我从内容提供者教程中学到的。

我想做的是专门处理输入重复 key 的情况,这样我就可以将该信息转发给用户(可能通过 Toast)。

我尝试在进行插入调用的位置添加 try/catch:

try{
getActivity().getContentResolver().insert(PMContract.MedicationEntry.CONTENT_URI, values);
} catch(SQLiteConstraintException e){
}

但捕获的不是 SQLiteConstraintException,而是 UnsupportedOperationException。

如何调整 ContentProvider 代码,以便知道何时出现 ConstraintException,并将其他所有内容视为 UnsupportedOperationException?

编辑

我尝试在 db.insert 调用周围包装一个 try/catch block :

case MEDICATION:
try {
_id = db.insert(PMContract.MedicationEntry.TABLE_NAME, null, values);
} catch(SQLiteConstraintException e){
String s = e.getMessage();
} catch(Exception e1){
String s1 = e1.getMessage();
}

if(_id > 0)
returnUri = PMContract.MedicationEntry.buildMedicationUri(_id);
else
throw new UnsupportedOperationException("Failed to insert row into: " + uri);
break;

我使用调试器来查看 db.insert() 引发的异常。但是,即使错误文本打印在 logcat 中,调试器也没有在两个 catch block 中命中断点。我不确定为什么会在 logcat 中打印异常,但调试器不会命中这些断点。

最佳答案

不要抛出异常,而是返回 null 作为您的 Uri - 然后您可以检查 insert() 调用的结果 - 如果您得到 null 返回值,您就知道这是一个约束问题。

关于java - 如何处理内容提供​​程序内的 SQLiteConstraintException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28055359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com