我的数据库中有几列已注释为uniqueCombo = true
@DatabaseField(columnName = "COL1", uniqueCombo = true)
private Double col1;
@DatabaseField(columnName = "COL2", uniqueCombo = true)
private Double col2;
根据ormlite文档,这两个字段的组合在表格中应该是唯一的。为了测试这个,我故意添加相同的字段。我确实得到了SQLException但不知道如何处理这个异常并要求用户进行更改。
try {
mydao.create(myInfo);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
/* Need to uniquely identify constraint failed error here
* and ask user to make suitable change */
}
知道如何实现这一目标。
- 更新---
SQLException getErrorCode和getSQLState分别返回0和null。
Logcat StackTrace:
Caused by: android.database.sqlite.SQLiteConstraintException: column NAME is not unique (code 19)
01-31 22:15:14.042: W/System.err(2586): at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
01-31 22:15:14.042: W/System.err(2586): at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:775)
01-31 22:15:14.042: W/System.err(2586): at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
01-31 22:15:14.042: W/System.err(2586): at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
01-31 22:15:14.042: W/System.err(2586): at com.j256.ormlite.android.AndroidDatabaseConnection.insert(AndroidDatabaseConnection.java:122)
01-31 22:15:14.042: W/System.err(2586): ... 15 more
答案 0 :(得分:1)
我确实得到了SQLException,但我不确定如何处理此异常并要求用户进行更改。
您当然可以捕获异常并查看它是否为instanceof SQLiteConstraintException
,但我总是讨厌将异常视为常见事件。
我要做的是对用户的输入进行查询,以查看是否存在具有相同字段的现有MyInfo
对象。如下所示:
QueryBuilder<MyInfo, Integer> qb = mydao.queryBuilder();
qb.where().eq("COL1", myInfo.col1).and().eq("COL2", myInfo.col2);
if (qb.queryForFirst() != null) {
// tell the user to enter unique values
}
答案 1 :(得分:0)
这不是最好的方法,但这对某些人有帮助......
try {
//insert to ORMLite
} catch (SQLException e) {
validateException(e);
}
validateException方法中的:
private void validateException(SQLException e) {
try{
if (e.getCause() == null)
throw e;
if (e.getCause().getCause() == null)
throw e;
if (e.getCause().getCause() instanceof SQLiteConstraintException)
Log.d("Test", "Ignoring duplicate");
else
throw e;
}catch(SQLException e1){
//exception thrown by e;
}
}