Intereting Posts
Невозможно фильтровать активы для нескольких плотностей с использованием инструментов сборки SDK 21 или более поздней версии Получение базы данных SQLite и ее хранение в массиве объектов Удалите все элементы из RecyclerView Полезные системные ресурсы Android Android build splash.9.png ошибка Отключение клавиатуры Android Камера Android: разница между PictureCallback, ShutterCallback и PreviewCallback Ошибка установки с сообщением Недействительный файл События Android Firebase Analytics не отображаются на консоли Как установить другой цвет границы прямоугольника с использованием штриха ImageView с закругленными углами через другое Изображение в качестве фона Android java.lang.IllegalMonitorStateException: объект не заблокирован потоком перед ожиданием () Кросс-платформенная покупка в приложении с использованием PayPal в веб-просмотре Android: LayoutInflater и findViewById беды GetSensorList () против getDefaultSensor () в Android SensorManager

Вставьте или обновите в SQlite и Android, используя database.query ();

Есть способ изменить мою функцию:

public categorie createCategoria(String categoria) { ContentValues values = new ContentValues(); values.put(MySQLiteHelper.COLUMN_NOME, categoria); values.put(MySQLiteHelper.COLUMN_PREF, 0); long insertId = database.insert(MySQLiteHelper.TABLE_CATEGORIE, null, values); Cursor cursor = database.query(MySQLiteHelper.TABLE_CATEGORIE, allCategorieColumns, MySQLiteHelper.COLUMN_ID + " = " + insertId, null, null, null, null); cursor.moveToFirst(); categorie newCategoria = cursorToCategorie(cursor); cursor.close(); return newCategoria; } 

Это сырая вставка, я хотел бы изменить эту функцию, чтобы она обновлялась или вставлялась соответственно. Я хотел бы изменить это, потому что я уже использую эту функцию в некоторых местах, но теперь мне нужно выбрать, вставлять строку или обновлять (или игнорировать вставку) строку с тем же COLUMN_NOME . Может ли кто-нибудь помочь мне сделать это?

Я имею в виду, что я хотел бы добавить новую строку ТОЛЬКО, если нет другого с тем же именем (как обычно, вы знаете).

Вы можете вызвать int nRowsEffected = database.update(...); Если строк нет в результате обновления, строка не существует (или вы запустили свое update() !), Поэтому вам нужно вызвать database.insert(...) . Конечно, если nRowsEffected> 0, то вы закончите.

Вы можете использовать insertWithOnConflict (), если вы хотите вставить или обновить , в зависимости от того, существует ли запись или нет:

 SQLiteDatabase db = this.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put(COLUMN_ID, id); contentValues.put(COLUMN_VALUE, value); // this will insert if record is new, update otherwise db.insertWithOnConflict(TABLE, null, contentValues, SQLiteDatabase.CONFLICT_REPLACE); 

Вы можете использовать execSQL и использовать INSERT OR REPLACE

 String[] args = {"1", "newOrOldCategory"}; // where 1 is the category id getWritableDatabase().execSQL("INSERT OR REPLACE INTO table_name (idColoumn, categoryColumn) VALUES (?, ?)", args); 

Прежде всего, у вас есть функция записи, которая проверяет, существует ли id в частности Table, например:

  /** * @param table_name * @param server_id * @return */ public boolean isServerIdExist(String table_name, int server_id) { long line = DatabaseUtils.longForQuery(mDB, "SELECT COUNT(*) FROM " + table_name + " WHERE id=?", new String[]{Integer.toString(server_id)}); return line > 0; } 

Вы должны передать table_name и id , чтобы

  /** * INSERT in TABLE_ACCOUNT_DEVICE **/ public long insertOrUpdateAccountDevice(int server_id, int account_id, String device_name, String device_id, String last_active, String itp, String utp, int status) { ContentValues values = new ContentValues(); values.put(ACCOUNT_DEVICE_ACCOUNT_ID, account_id); values.put(ACCOUNT_DEVICE_DEVICE_NAME, device_name); values.put(ACCOUNT_DEVICE_DEVICE_ID, device_id); values.put(ACCOUNT_DEVICE_LAST_ACTIVE, last_active); values.put(ACCOUNT_DEVICE_ITP, itp); values.put(ACCOUNT_DEVICE_UTP, utp); values.put(ACCOUNT_DEVICE_STATUS, status); // 0=pending, 1=active, 2=Inactive, -1=not_found /** * isServerIdExists */ if (isServerIdExists(TABLE_ACCOUNT_DEVICE, server_id)) { values.put(ACCOUNT_DEVICE_SERVER_ID, server_id); return mDB.insert(TABLE_ACCOUNT_DEVICE, null, values); } else { return mDB.update(TABLE_ACCOUNT_DEVICE, values, ACCOUNT_DEVICE_SERVER_ID + " =? ", new String[]{Integer.toString(server_id)}); } } 

Надеюсь, это поможет вам.