0

Web からアイテムに関する情報を取得していて、アプリで特定の行が存在するかどうかを確認したいと考えています。それらが存在する場合、アプリはそれらの行を更新する必要があります。存在しない場合は、新しい行を作成する必要があります。

try {
    mDb.execSQL("UPDATE ["
    + ParseReciverAddList.tableName
    + "] SET purchased = " + pCheck
    + " WHERE id =" + (thisId));
    mDb.execSQL("UPDATE ["
    + ParseReciverAddList.tableName
    + "] SET name = '" + (PName)
    + "' WHERE id =" + (thisId));
    mDb.execSQL("UPDATE ["
    + ParseReciverAddList.tableName
    + "] SET quantity = '" + (pQuantity)
    + "' WHERE id =" + (thisId));
    Log.d("p", "e");
} catch (Exception e) {
    Log.d("p", "ne");
    mDb.execSQL("INSERT INTO ["+ParseReciverAddList.tableName+"] VALUES ("+thisId+","+pCheck+", '"+PName+"','"+pQuantity+"');");
}

私はそれを更新しようとすると思います。それがスローされた場合、Exceptionそれは行が存在しないことを意味し、それを作成します。

ただし、問題が発生しています。行が存在しなくても、 はスローされませんExceptioncatch行が既に存在するときに句をトリガーしない理由についてのアイデアはありますか?

4

1 に答える 1

1

ただし、問題が発生しています。行が存在しない場合でも、例外はスローされません。行が既に存在するときに catch 句をトリガーしない理由についてのアイデアはありますか?

理由は、文字列が無効な場合にのみexecSQL()スローされることです。しかし、あなたの問題は、行が存在しない場合、単にステートメントが適用されないということですが、それはString が正しくないという意味ではありません。SQLExceptionSQLUPDATESQL

update()解決策は、たとえば、影響を受ける行数を返すAPI メソッドを使用することです。0 が返される場合は、単純に実行しますINSERT

擬似コード:

int rowsAffected = db.update("table", values, "id = ?", 
                   new String[] {String.valueOf(thisId)});
if (rowsAffected == 0) {
   // perform insert
}
于 2013-03-28T14:14:23.457 に答える