3

データベースを操作するために、 、 などの代わりに メソッドrawQueryとメソッドを使用しようとしています。次のコードで UPDATE を実行しようとしています。execSQL.update.insert

db.execSQL("UPDATE configuration " +
                "SET number_fields = " + number_fields + ", "
                + "frequency = " + frequency + ", "
                + "ag = " + ag + ", "
                + "number_alarms = " + number_alarms + ", "
                + "failed_rapper = " + failed_rapper + ", "
                + "max_mv = " + max_mv + ", "
                + "max_nav = " + max_nav + " "
                + "WHERE serial_id = " + Integer.toString(id) + ";");

このアクションの後、更新が発生したことを示すログがあり、動作しているように見えますが、テーブルで選択ステートメントを実行しようとすると、次のエラーが返されます。

06-10 10:01:47.564: W/System.err(3815): android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

これで、SQLite Database Browser を使用して手動で挿入した Android のさまざまなデータに対して同じ SELECT を実行しましたが、正常に動作します。SQLite ブラウザでも同じ UPADTE を実行しましたが、そこで動作しました。したがって、問題は、Android で実行しているときに UPDATE コマンドが機能しないことです。

質問:execSQL()メソッド内で UPDATE コマンドが機能しないのはなぜですか?

4

2 に答える 2

6

Android SQLiteDatabase クラスのドキュメントから:

SELECT ではない単一の SQL ステートメント、またはデータを返すその他の SQL ステートメントを実行します。

データ (影響を受ける行の数など) を返す手段はありません。代わりに、可能であれば、insert(String, String, ContentValues)、update(String, ContentValues, String, String[]) などを使用することをお勧めします。

じゃあ後で:

UPDATE ステートメントの場合は、代わりに次のいずれかを使用します。

update(文字列、ContentValues、文字列、文字列[])

updateWithOnConflict(String, ContentValues, String, String[], int)

私が知る限り、execSQLメソッドは、テーブルの作成やスキーマの変更など、より高レベルのデータベース操作のためのものであり、.query行を変更するには.update、、、.deleteなどのメソッドを使用する必要があります。.updateこの操作を実行する以外に別のオプションがあるかどうかわかりません。

于 2013-06-10T15:08:58.257 に答える
2

更新クエリの例を次に示します。

public boolean updateCartTable(String retailerName, String mCouponId){
        final ContentValues values = new ContentValues();

        values.put(TableConstantName.COUPON_ONLY_STATUS, 1);
        values.put(TableConstantName.COUPON_SRORE_DEALS_STATUS, 1);
        values.put(TableConstantName.COUPON_CATAGORY, "C");
        try {
            sDb.beginTransaction();
            final boolean state = sDb.update(TableConstantName.COUPON_TABLE, values, TableConstantName.CART_COUPON_RETAILER_NAME + "=" + "'"+retailerName+"'"+ " AND "+TableConstantName.CART_COUPON_ID + "=" + "'"+mCouponId+"'", null)>0;
            sDb.setTransactionSuccessful();
            return state;
        } catch (SQLException e) {
            throw e;
        } finally {
            sDb.endTransaction();
        }
    }
于 2013-06-10T15:14:25.190 に答える