2012-02-06 3 views
0

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

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

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

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

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

ответ

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(), который намного проще.

+0

Первая проблема не проблема, я уже проверил это. Как я могу использовать Insert или execSQL? PLS вы можете дать мне пример из кода выше? –

+0

'insert()' лучше. См. Документы: http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#insert(java.lang.String, java.lang.String, android.content.ContentValues) –

+0

Вставить не поддержка SQL-запросов. –

Смежные вопросы