База данных не хранит запрос - PullRequest
0 голосов
/ 06 февраля 2012

я пытаюсь запустить следующий код

        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();
           }
        }

Курсор, который он возвращает, является нулевым, и даже если транзакция прошла успешно, он не сохранит данные, которые я предоставил, в базу данных.

Мой первичный ключ состоит из UserId, accountId, and accountType

Никаких исключений не записывается. Есть идеи, где я делаю ошибку?

1 Ответ

3 голосов
/ 06 февраля 2012

Первая проблема. Ваша обработка исключений немного запутана. Вы хотите перехватывать исключения, которые случаются при выполнении запроса , а не просто управлять транзакцией. Я подозреваю, что если вы это исправите, вы увидите исключение.

Это должно выглядеть так. Обратите внимание, что запрос теперь выполняется внутри блока 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(), который намного проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...