0

SQLite データベースのテーブルを更新する必要があります。

テーブルは AppName (文字列) 、StartTime (文字列) および EndTime (文字列) 列で構成されます。

AppName = app(現在のアプリの名前を含む変数) AND EndingTime != "0" のレコードの EndingTime を更新する必要があります。

単一の Where 句は正常に機能していましたが、2 つの Where 句を含めるための標準的な手順がわかりません。次の方法で試しましたが、結果はありませんでした。

return db.update(DATABASE_TABLE, args, "AppName=? AND EndingTime<>?", new String[]{AppName,"0"})>0

助けてください。

4

4 に答える 4

0

あなたがしていることは、<> の代わりに != を使用する必要があるという事実とは別にあります。SQL ステートメントで 2 つの WHERE 句が必要な場合は、それらを AND で結合します。そうしても害はありません。パラメータ化されたクエリを使用しているため、クエリが SQL インジェクション攻撃にさらされることはありません。

于 2013-06-05T11:54:41.230 に答える
0

<>の代わりに!=を使用してみてください。

于 2013-06-05T11:51:03.967 に答える
0

onUpgrade() メソッドでALTER TABLE関数を使用できます。

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   // If you need to add a column
   if (newVersion > oldVersion) {
       db.execSQL("ALTER TABLE foo ADD COLUMN new_column INTEGER DEFAULT 0");
   }
}
于 2013-06-05T11:42:07.720 に答える
0
AND EndingTime != "0"

メソッドで指定された EndingTime を参照しているかどうかはわかりません。たとえば、次のように言います。

public static void updateEndingTime (final Context context, 
    String appName, int endingTime) {}

または、そのアプリ名のデータベースに既に保存されている EndingTime を意味する場合。

最初のケースでは、データベースを更新する前に単に if ステートメントを実行します。たとえば、指定されたendingTime がゼロと異なる場合は値を保存し、それ以外の場合は保存しません。

public static void updateEndingTime (final Context context, 
    String appName, int endingTime) {
    //open your database object, blah, blah

    if (endingTime != 0) {
        //save the data
    }
}

2 番目のケースの場合は、単純に 2 つを「And」という単語で結合します。

public static int updateEndingTime (final Context context, 
    String appName, int endingTime) {
    //open your database object, blah, blah
    String where = "AppName = " + appName + " and EndingTime != 0 ";
    return mDatabase.update(DATABASE_TABLE, args, where, null);
}

args適切に構造化された ContentValues オブジェクトであることを確認してください。

于 2013-06-05T12:00:00.643 に答える