SQLite как перезаписать те же данные

#java #android #sqlite

#java #Android #sqlite

Вопрос:

Я работаю над проектом Android, в основном у меня есть некоторые координаты x, y в моем sqlite, но когда я добавляю новые данные, я хочу проверить данные и, если есть те же данные, перезаписать их.

 public void DBCreate(){
    SQLITEDATABASE = openOrCreateDatabase("LatLongDatabase", Context.MODE_PRIVATE, null);
    SQLITEDATABASE.execSQL("CREATE TABLE IF NOT EXISTS myTable(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, mCurrentLocationLAT VARCHAR,mCurrentLocationLONG VARCHAR);");
}

public void SubmitData2SQLiteDB(){


        SQLiteQuery = "INSERT INTO myTable (mCurrentLocationLAT, mCurrentLocationLONG) VALUES('" mCurrentLocation.getLatitude() "','" mCurrentLocation.getLongitude() "');";
        SQLITEDATABASE.execSQL(SQLiteQuery);

        Toast.makeText(CampaignActivity.this,"OK", Toast.LENGTH_LONG).show();


}
  

Комментарии:

1. Если данные те же, зачем обновлять? вам просто нужно пропустить вставку, верно?

2. что такое первичный ключ на вашем myTable ?

3. Посмотрите на REPLACE

4. @Vasya Вы правы, это возможно.

5. Как я могу игнорировать одни и те же данные?

Ответ №1:

Вам нужно использовать UPDATE запрос для обновления строки с помощью PRIMARY_KEY , если данные существуют, или INSERT новой строки.

Поскольку в вашей таблице есть PRIMARY_KEY as id , вы можете проверить, существует ли строка, как показано ниже.

 SELECT EXISTS(SELECT 1 FROM myTable WHERE id='ROW_ID');
  

Если приведенный выше запрос возвращает 1, значит, данные существуют, и вам нужно использовать UPDATE запрос, как показано ниже, иначе используйте INSERT запрос.

 UPDATE myTable SET mCurrentLocationLAT=value1, mCurrentLocationLONG=value2 WHERE id='ROW_ID';
  

Комментарии:

1. Должно ли это быть так? SQLiteQuery = «ОБНОВИТЬ До ЗНАЧЕНИЙ myTable32 (mCurrentLocationLAT, mCurrentLocationLONG) (‘» mCurrentLocation.getLatitude() «‘,'» mCurrentLocation.getLongitude() «‘);»;

2. Я пытаюсь в течение двух дней и не могу этого сделать, не могли бы вы, пожалуйста, исправить мой код и написать:(

3. Вы не можете изменить вставку в ОБНОВЛЕНИЕ и попытаться запустить SQL. Проверьте w3schools.com/sql/sql_update.asp подробнее об операторах ОБНОВЛЕНИЯ.

4. Да, я изменил его, но он выдает эту ошибку «Ошибка SQL (запроса) или отсутствует база данных»

5. Можете ли вы мне помочь, пожалуйста, срочно, я не могу сделать

Ответ №2:

В SQLite есть оператор INSERT ИЛИ REPLACE, который может быть сокращен только для ЗАМЕНЫ, который вставит новую строку, если она не существует, или заменит (удалит, а затем вставит) строку, если она существует. Прочитайте документы, чтобы узнать об ограничениях первичного ключа и о том, как с ними обращаться.

 REPLACE INTO positions (title, min_salary)
VALUES
 ('Full Stack Developer', 140000);
  

Комментарии:

1. Я пробовал, но записывает одни и те же данные снова и снова.

2. Как я уже сказал, это зависит от того, как определен первичный ключ и / или любые другие индексы с ограничением уникального ключа. Но это, вероятно, не то, что вы хотите в любом случае.

3. У меня есть первичный ключ, но ЗАМЕНА перезаписывает