0

製品名、製品価格、製品カウンターのデータベースがあります。商品名はユニークで、商品価格は新しい値が入力されるたびに置き換えられ、問題は商品カウンターです。そのデフォルト値は1で、新しい製品が入力されると、彼の値は 1 に設定されます。製品名が競合するたびに値を増やす必要がありCheeseます2。私がする必要があるのは、競合があるとき、その値に1を追加することです。後でこれが必要になるので、このようにしたいと思います。入力した値を、アプリに実装する予定の他のもののテーブル値に追加する必要があります。

どうすればこれを達成できますか? contentvaluessqlite 構文 ( ) ではなく、挿入の方法を使用して、現在行っている方法でそれを続けたいと思いINSERT,SELECT,etcます。それは可能ですか? Cuz 私は sqlite 構文で絶対 0 です。また、データベースに挿入するために他のアクティビティで呼び出すことができるメソッドが必要です (のようにinsertCountry(Japan,10))

public class SQLiteCountryAssistant extends SQLiteOpenHelper {
private static final String DB_NAME = "usingsqlite.db";
private static final int DB_VERSION_NUMBER = 1;
private static final String DB_TABLE_NAME = "countries";
private static final String DB_COLUMN_1_NAME = "country_name";
private static final String DB_COLUMN_2_NAME = "country_price";
private static final String DB_COLUMN_3_NAME = "country_counter";


private static final String DB_CREATE_SCRIPT = "create table "
        + DB_TABLE_NAME
        + " (_id integer primary key autoincrement, country_name text UNIQUE ON CONFLICT REPLACE,country_price text,country_counter integer default '1' );)";

そして、これは私が挿入する方法です:

public void insertCountry(String countryName, String countryPrice) {
    sqliteDBInstance.execSQL("INSERT INTO " + DB_TABLE_NAME
            + "(country_name, country_price) VALUES('" + countryName
            + "', '" + countryPrice + "')");

}
4

2 に答える 2

0

データベースクラスはわかりませんが、この方法を確認してください:

return this.sqliteDBInstance.insertWithOnConflict(DB_TABLE_NAME, null, contentValues, SQLiteDatabase.CONFLICT_REPLACE);

列を正しく作成している場合、競合が発生すると、古いエントリが新しいエントリに置き換えられます。

編集:最後のコメントの後、必要なのは更新だけです:最初にアイテムの名前でデータベースにクエリを実行します(パラメーターが問題ないかどうかを注意深く確認してください):

return this.sqliteDBInstance.query(DB_TABLE_NAME, null, DB_COLUMN_1_NAME + "=?", new String[] {productName}, null, null, null);

これは、0 または 1 行の Cursor を返します。行がない場合は、通常どおりデータを挿入できます (カウンターを追加することを忘れないでください: 最初の挿入では 1 です)。

public void insertCountry(String countryName, String countryPrice) {
sqliteDBInstance.execSQL("INSERT INTO " + DB_TABLE_NAME
        + "(country_name, country_price) VALUES('" + countryName
        + "', '" + countryPrice + "', '" + countryCounter + "')");

}

1行ある場合、製品はすでにデータベースにあるため、カーソルを繰り返し、カウンターの値を取得し、+1を追加して、次の方法でデータベースを更新します:

public int update (String table, ContentValues values, String whereClause, String[] whereArgs)
于 2013-07-06T09:09:42.510 に答える