2012-02-06 69 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?請問你能從上面的代碼給我一個例子嗎? – 2012-02-06 09:59:36

+0

'insert()'更好。查看文檔:http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#insert(java.lang.String,java.lang.String,android.content.ContentValues) – 2012-02-06 10:00:50

+0

insert not支持sql語句。 – 2012-02-06 10:02:03