数据库不存储查询

时间:2012-02-06 09:42:29

标签: java android eclipse sqlite

我正在尝试运行以下代码

        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

没有记录任何例外情况。知道我在哪里做错了吗?

1 个答案:

答案 0 :(得分:3)

第一个问题。您的异常处理有点困惑。您希望捕获在执行查询时发生的异常,而不仅仅是管理事务。我怀疑如果你解决这个问题,你会看到一个异常被抛出。

看起来应该是这样的。请注意,查询现在在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()方法。