2011-12-31 208 views
2

在我的應用程序中,我使用了SQLiteOpenHelper類,它有insertOrThrow方法。我想知道這個方法會在拋出異常之前關閉我的連接嗎?並且在方法的定義上寫入「新插入的行的行ID,或者-1如果發生錯誤」Android拋出異常

當拋出異常時,它如何返回值?有些事情是錯的。解釋還是拋出?

這是我如何使用InsertOrThrow。 我想知道當我向我的方法聲明throws Exception時,是否有必要使用try-catch(如果我沒有任何特殊的事情可以像我的exp那樣捕獲)?

public long insert(ContentValues cv) throws Exception { 
    try 
    { 
     long rowId = getWritableDatabase().insertOrThrow(_tableName, null, cv); 
     return rowId; 
    } 
    catch (Exception ex) { 
     throw ex; 
    } 
    finally{ 
     Close(); 
    } 
} 
+0

發佈你嘗試過的實用東西。 – Lion 2011-12-31 19:59:42

回答

1

這取決於;如果this.Close()可以拋出異常,那麼它仍然需要被聲明爲拋出或捕獲。通常情況下,這是用小的實用方法來包裝的。

這不是強制性使用catch,你可以簡單地try/finally

關於返回值:由於異常而退出的方法沒有返回值。

異常應該封裝足夠的信息之一:

  • 允許呼叫者做一些不同之處是有用的,例如,重試操作,或
  • 幫助開發人員理解問題,並導致他/她的決議。

我鼓勵你遵循標準的Java命名約定,以避免您的代碼混淆讀者:非最終變量應該以小寫字母開頭。方法名稱也應以小寫字母開頭。

另外,如果不需要消除您正在訪問的屬性的歧義,則無需在this前加上方法(或變量)。

+0

感謝您的回答。我在我的公司使用VB.NET,而我們的慣例就是這樣。它需要時間來遵循Java標準。那麼InsertOrThrow方法呢?它拋出異常還是返回-1?或者他們兩個? – ahmet 2011-12-31 21:13:27

+0

@AhmetHüdaiAYDIN它會* *返回一個值,*或*拋出一個異常。 – 2011-12-31 21:22:57

+0

反對票是...? – 2017-08-03 12:06:17

0

當拋出一個異常如何有返回值?有些事情是錯的。

是的,你說得對。該文件似乎是錯誤的。

insertOrThrow不返回-1,相反,如果查詢失敗,它將拋出SQLException。還有一種叫做insert的方法,如果查詢失敗,將返回-1,如果成功,則新創建rowID