#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. У меня есть первичный ключ, но ЗАМЕНА перезаписывает