我正在尝试运行以下代码
mDb.beginTransaction();
String updateQuery ="INSERT INTO MAAccounts(userId, accountId, accountType, accountName, parentAccountId, currencyCode, isTransactionDefaultStatusOpen, currentBalance, monthlyBudget, createdOn, updatedOn) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
String[] valVars = {
stringToDB(account.userId),
integerToDB(account.accountId).toString(),
integerToDB(account.accountType.getValue()).toString(),
stringToDB(account.accountName),
integerToDB(account.parentAccountId),
stringToDB(account.currencyCode),
boolToDB(account.isTransactionDefaultStatusOpen).toString(),
CurrencyToDB(account.currentBalance).toString(),
CurrencyToDB(account.monthlyBudget).toString(),
dateToDB(now),
"false"};
// Cursor c = mDb.rawQueryWithFactory(null, updateQuery, valVars, null);
Cursor c = mDb.rawQuery(updateQuery, valVars);
try{
mDb.setTransactionSuccessful();
}catch (Exception e){
Log.e("Error in transaction", e.toString());
}finally{
mDb.endTransaction();
c.close();
}
}
它返回的游标为null,即使交易成功,也不会将我提供的数据存储到数据库中。
我的主键包含
UserId, accountId, and accountType
没有异常被记录。知道我在哪里做错吗?
最佳答案
第一个问题。您的异常处理有些混乱。您希望捕获执行查询时发生的异常,而不仅仅是管理事务。我怀疑如果解决此问题,将会看到抛出异常的情况。
它应该看起来像这样。注意,查询现在在try {...}
块内执行。
Cursor c = null;
mDb.beginTransaction();
try {
c = mDb.rawQuery(updateQuery, valVars);
mDb.setTransactionSuccessful();
} catch (Exception e) {
Log.e("Error in transaction", e.toString());
} finally {
mDb.endTransaction();
if (c != null)
c.close();
}
第二个问题。您不是在查询数据库;而是在查询数据库。您正在插入数据。不应期望此操作返回结果,因此
rawQuery()
确实是使用错误的东西。您应该改为研究execSQL()
,或者使用更简单的insert()
方法。