Как обновить, вставить и удалить строки в Sqlite? - PullRequest
0 голосов
/ 02 июля 2019

Я новичок в разработке для Android, прошел несколько уроков и написал приложение, используя sqlite Db.

У меня есть пара проблем, как указано ниже 1. Как обновить строки в моей БД? 2. Удалить обновленные строки? 3.Как вставить новые строки?

// код ниже для обновления строк

SQLiteDatabase db = dbHandler.getWritableDatabase();
for (int i = 0; i <= 100000; i = i + 100) {
    ContentValues cValues = new ContentValues();
    cValues.put(DbHandler.COLUMN_ID, i + 1);
    cValues.put(DbHandler.COLUMN_NAME, "Test");
    cValues.put(DbHandler.COLUMN_SERIALNUMBER, String.valueOf(i + 1));
    cValues.put(DbHandler.COLUMN_COUNTALL, 10);
    cValues.put(DbHandler.COLUMN_COUNTHIGH, i + 1);
    cValues.put(DbHandler.COLUMN_COUNTLOW, i + 1);
    cValues.put(DbHandler.COLUMN_RAWDATA, i + 1);
    db.update(DbHandler.TABLE_USERS, cValues, DbHandler.COLUMN_ID,new String[]{String.valueOf(i)});
}
db.close();

Удалить определенные строки - ниже код полностью очищает БД вместо определенных строк

for (int i = 0; i <= 100000; i = i + 100) {
    db.delete(DbHandler.TABLE_USERS, i+"", null);
}

Ответы [ 3 ]

2 голосов
/ 02 июля 2019

Вот методы для выполнения действия обновления, вставки и удаления в SQLite

  1. insertData

    public long insertData() {
      SQLiteDatabase db = this.getWritableDatabase();
      ContentValues values = new ContentValues();
    
      values.put(KEY_TITLE, "Title");
      values.put(KEY_ACTIVITY_TYPE,"Event Type");
      values.put(KEY_PLACE, "Event place");
      values.put(KEY, "VALUE");
      values.put(KEY_, "VALUE");
    
      long id = db.insert(TABLE_NAME, null, values);
      return id;
    }
    
  2. updateRow

    public int updateRow(String row_id) {
    
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    
    values.put(KEY_TITLE, "Title");
    values.put(KEY_ACTIVITY_TYPE,"Event Type");
    values.put(KEY_PLACE, "Event place");
    values.put(KEY, "VALUE");
    values.put(KEY_, "VALUE");
    
    return db.update(TABLE_NAME, values, KEY_ID + " = ?",
            new String[]{row_id});
    }
    
  3. deleteRow

    public int deleteRow (String row_id) {SQLiteDatabase db = this.getWritableDatabase ();ContentValues ​​values ​​= new ContentValues ​​();return db.delete (TABLE_NAME, WHERE KEY_ID + "=?", новая строка [] {row_id});}

1 голос
/ 02 июля 2019

вы можете написать дао класс (Data Access Object) и работать с классом это просто, вы просто запустите SQL-запрос на БД эта ссылка поможет вам

например, вставка

        val query = ("insert into " + DownloaderDatabase.TABLE_NAME + " " +
            "(" +
            ColumnModel.URL + "," +
            ColumnModel.FILE_NAME + "," +
            ColumnModel.STATUS + "," +
            ColumnModel.PERCENT + "," +
            ColumnModel.SIZE + "," +
            ColumnModel.TOTAL_SIZE
            + ")" +
            " VALUES(" + "\"" + fileModel.url + "\"" + ","
            + " " + "\"" + fileModel.fileName + "\"" + ","
            + " " + fileModel.status + ","
            + " " + fileModel.percent + ","
            + " " + fileModel.size + ","
            + " " + fileModel.totalSize + ")")
    database.writableDatabase.execSQL(query)
    database.close()

например обновление

  val query = "update " + DownloaderDatabase.TABLE_NAME + " " +
            " set " + ColumnModel.STATUS + " = " + status +
            " , " + ColumnModel.PERCENT + " = " + percent +
            " , " + ColumnModel.SIZE + " = " + size +
            " , " + ColumnModel.TOTAL_SIZE + " = " + totalSize +
            " where " + ColumnModel.URL + " = " + "\"" + url + "\""
    database.writableDatabase.execSQL(query)
    database.close()

например получить данные

        var model: FileModel? = null
    val query =
        "select * from " + DownloaderDatabase.TABLE_NAME + " where " + ColumnModel.URL + " = \"" + url + "\""
    val cursor = database.readableDatabase.rawQuery(query, null)
    while (cursor.moveToNext()) {
        val itemId = cursor.getInt(cursor.getColumnIndex(ColumnModel.ID))
        val itemUrl = cursor.getString(cursor.getColumnIndex(ColumnModel.URL))
        val itemFileName = cursor.getString(cursor.getColumnIndex(ColumnModel.FILE_NAME))
        val itemStatus = cursor.getInt(cursor.getColumnIndex(ColumnModel.STATUS))
        val itemPercent = cursor.getInt(cursor.getColumnIndex(ColumnModel.PERCENT))
        val itemSize = cursor.getInt(cursor.getColumnIndex(ColumnModel.SIZE))
        val itemTotalSize = cursor.getInt(cursor.getColumnIndex(ColumnModel.TOTAL_SIZE))
        model = FileModel(itemId, itemUrl, itemFileName, itemStatus, itemPercent, itemSize, itemTotalSize)
    }
    cursor.close()
    database.close()
    return model
0 голосов
/ 02 июля 2019

Если вы хотите вставить строки в таблицу, используйте ContentValues ​​(как ваш код обновления) и метод insert():

SQLiteDatabase db = dbHandler.getWritableDatabase();
for (int i = 0; i < 3; i++) {
    ContentValues cValues = new ContentValues();
    cValues.put(DbHandler.COLUMN_ID, i + 1);
    cValues.put(DbHandler.COLUMN_NAME, "Test");
    cValues.put(DbHandler.COLUMN_SERIALNUMBER, String.valueOf(i + 1));
    cValues.put(DbHandler.COLUMN_COUNTALL, 10);
    cValues.put(DbHandler.COLUMN_COUNTHIGH, i + 1);
    cValues.put(DbHandler.COLUMN_COUNTLOW, i + 1);
    cValues.put(DbHandler.COLUMN_RAWDATA, i + 1);
    db.insert(DbHandler.TABLE_USERS, null, cValues);
}
db.close();

Приведенный выше код вставит в таблицу 3 строки:

1 Test 1 10 1 1 1
2 Test 2 10 2 2 2
3 Test 1 10 3 3 3

Теперь, скажем, что вы хотите обновить столбец COLUMN_COUNTHIGH до 100 и столбец COLUMN_COUNTLOW до 0 строки с id = 2, тогда вы используете update() метод:

SQLiteDatabase db = dbHandler.getWritableDatabase();
ContentValues cValues = new ContentValues();
cValues.put(DbHandler.COLUMN_COUNTHIGH, 100);
cValues.put(DbHandler.COLUMN_COUNTLOW, 0);
db.update(DbHandler.TABLE_USERS, cValues, DbHandler.COLUMN_ID + " = ?", new String[] {String.valueOf(2)});
db.close();

Итак, аргументы метода update():
Название стола
ContentValues
предложение WHERE, которое содержит имена столбцов и заполнители ?, которые будут определять, какие строки будут обновлены
и значение (я) столбца (столбцов), которое будет установлено в месте ?
Если вы хотите удалить , скажем, строку с id = 1, используйте метод delete():

db.delete(DbHandler.TABLE_USERS, DbHandler.COLUMN_ID + " = ?", new String[] {String.valueOf(1)}); 

Аргументы аналогичны аргументам метода update() (без ContentValues).

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