Обновление отдельной строки в SQLite Android Studio - PullRequest
0 голосов
/ 16 ноября 2018

Поэтому я пытаюсь обновить одну строку в моей базе данных sql следующим методом

public boolean modiService(String name, String price, String updatename, String updateprice ){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(COLUMN_NAME, updatename);
    cv.put(COLUMN_RATE, updateprice);
    db.update(TABLE_SERVICE, cv, COLUMN_NAME + " = ?" , new String[] {name});
    return true;

}

Однако, когда функция вызывается, она обновляет все строки.Я пытался изменить значения в вызываемом методе "update", но я не смог заставить его работать

1 Ответ

0 голосов
/ 18 ноября 2018

Нет ничего плохого в том коде, который вы показали.Пример ниже, который использует ваш точный код, который вы показали, работает.

Таким образом, ваша проблема связана либо с другим необеспеченным кодом, либо с методом, который вы используете, чтобы определить, что данные не были обновлены.

Для этого теста следующее былокод для класса, который является подклассом SQLiteOpenHelper, в данном случае ServiceDBHelper.java : -

public class ServiceDBHelper extends SQLiteOpenHelper {

    public static final String DBNAME = "service.db";
    public static final int DBVERSION = 1;
    public static final String TABLE_SERVICE = "service";
    public static final String COLUMN_NAME = "name";
    public static final String COLUMN_RATE = "rate";

    public ServiceDBHelper(Context context) {
        super(context, DBNAME, null, DBVERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        String crt_sql = "CREATE TABLE IF NOT EXISTS " + TABLE_SERVICE + "(" +
                COLUMN_NAME + " TEXT PRIMARY KEY, " +
                COLUMN_RATE + " TEXT" +
                ")";
        db.execSQL(crt_sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i1) {

    }

    public long insertService(String name, String price) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put(COLUMN_NAME,name);
        cv.put(COLUMN_RATE,price);
        return db.insert(TABLE_SERVICE,null,cv);
    }

    public boolean modiService(String name, String price, String updatename, String updateprice ){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put(COLUMN_NAME, updatename);
        cv.put(COLUMN_RATE, updateprice);
        db.update(TABLE_SERVICE, cv, COLUMN_NAME + " = ?" , new String[] {name});
        return true;
    }

    public void logService(String description) {
        String TAG = "LOGSERVICE";
        Log.d(TAG,"Logging information for the Service Table for " + description);
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor csr = db.query(TABLE_SERVICE,null,null,null,null,null,null);
        Log.d(TAG,"Number of rows in the " + TABLE_SERVICE + " table is " + String.valueOf(csr.getCount()));
        while (csr.moveToNext()) {
            Log.d(TAG,
                    "Column " + COLUMN_NAME + " has a value of " + csr.getString(csr.getColumnIndex(COLUMN_NAME)) +
                    ".  Column " + COLUMN_RATE + " has a value of " + csr.getString(csr.getColumnIndex(COLUMN_RATE))
            );
        }
        csr.close();
    }
}
  • Как вы можете видеть, метод modiService соответствует вашему коду.
  • Другой код был добавлен в: -
    • Создать таблицу (именованную службу) при создании базы данных.
    • Вставить строки в таблицу, чтобы добавить некоторые тестовые данные.
    • Запись данных из таблицы в журнал.

Ниже приведен код, используемый в Activity для - вставки некоторых строк - отображения строк- обновить (изменить строку) - отобразить строки

Код, использованный в MainActivity.java , был: -

public class MainActivity extends AppCompatActivity {

    ServiceDBHelper mDBHlpr;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mDBHlpr = new ServiceDBHelper(this);
        mDBHlpr.insertService("Fred","125.45");
        mDBHlpr.insertService("Mary","99.75");
        mDBHlpr.insertService("Harry","245.34");
        mDBHlpr.logService("After initial inserts");
        mDBHlpr.modiService("Mary","99.75","Susan","333.33");
        mDBHlpr.logService("After Updating Mary to Susan");
    }
}

Соответствующий вывод в журнале был:-

11-18 06:51:02.303 1212-1212/so53291104.so53291104 D/LOGSERVICE: Logging information for the Service Table for After initial inserts
11-18 06:51:02.303 1212-1212/so53291104.so53291104 D/LOGSERVICE: Number of rows in the service table is 3
11-18 06:51:02.303 1212-1212/so53291104.so53291104 D/LOGSERVICE: Column name has a value of Fred.  Column rate has a value of 125.45
11-18 06:51:02.303 1212-1212/so53291104.so53291104 D/LOGSERVICE: Column name has a value of Mary.  Column rate has a value of 99.75
11-18 06:51:02.303 1212-1212/so53291104.so53291104 D/LOGSERVICE: Column name has a value of Harry.  Column rate has a value of 245.34
11-18 06:51:02.307 1212-1212/so53291104.so53291104 D/LOGSERVICE: Logging information for the Service Table for After Updating Mary to Susan
11-18 06:51:02.307 1212-1212/so53291104.so53291104 D/LOGSERVICE: Number of rows in the service table is 3
11-18 06:51:02.307 1212-1212/so53291104.so53291104 D/LOGSERVICE: Column name has a value of Fred.  Column rate has a value of 125.45
11-18 06:51:02.307 1212-1212/so53291104.so53291104 D/LOGSERVICE: Column name has a value of Susan.  Column rate has a value of 333.33
11-18 06:51:02.307 1212-1212/so53291104.so53291104 D/LOGSERVICE: Column name has a value of Harry.  Column rate has a value of 245.34

Как видно, строка Мэри 99,75 была измененаиспользуя метод modiService для Сьюзен 333,33 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...