2016-01-27 2 views
-1

Первый вопрос, который я хотел бы задать, быстрее сделать один запрос на удаление с несколькими предложениями, или быстрее выполнить один за другим? И второе, если так, то как сделать запрос на удаление с несколькими предложениями? Спасибо заранее!Как УДАЛИТЬ, используя несколько предложений WHERE [SQLITE]

+0

Вы имеете в виду что-то вроде 'Удалить из СТУДЕНТОВ Где student_id = 1 И Student_Name LIKE '% An%' '? – user2004685

+2

@ user2004685 он, вероятно, означает «OR», а не «AND», так как он предлагает альтернативу для выполнения нескольких запросов. – Aaron

+0

Да, я хотел бы удалить несколько строк сразу, как WHERE name = John surname = Doe, а также WHERE name = Dog surname = Barf Что-то вроде этого –

ответ

2

Вы не можете иметь более одного WHERE положение, но вы можете сделать условие более сложным.

Если таблица имеет FirstName и LastName, и вы хотите удалить John Doe, Toby Steed и Linda Powers, а затем объединить AND и OR условия, как это:

DELETE FROM MyTable 
WHERE (FirstName = 'John' AND LastName = 'Doe') 
    OR (FirstName = 'Toby' AND LastName = 'Steed') 
    OR (FirstName = 'Linda' AND LastName = 'Powers') 

Теперь, если вы делаете это с Java, вы не должен (КОГДА-ЛИБО!) использовать конкатенацию строк для создания такого SQL-оператора. Используйте PreparedStatement:

String sql = "DELETE FROM MyTable" + 
      " WHERE (FirstName = ? AND LastName = ?)" + 
       " OR (FirstName = ? AND LastName = ?)" + 
       " OR (FirstName = ? AND LastName = ?)"; 
try (PreparedStatement stmt = conn.prepareStatement(sql)) { 
    stmt.setString(1, "John"); 
    stmt.setString(2, "Doe"); 
    stmt.setString(3, "Toby"); 
    stmt.setString(4, "Steed"); 
    stmt.setString(5, "Linda"); 
    stmt.setString(6, "Powers"); 
    stmt.executeUpdate(); 
} 
+0

Спасибо! И почему я не должен использовать конкатенацию строк для создания инструкции SQL? Как это очень плохо, если я так делаю? –

+1

@ J.Arbet Поскольку значения (например, «Джон»), скорее всего, связаны с внешним ненадежным источником и могут быть вредоносными или просто содержать символы, вызывающие проблемы SQL, например. апостроф. Таким образом, если вы не избежите всех специальных символов, вы становитесь восприимчивыми к атакам [SQL Injection] (https://en.wikipedia.org/wiki/SQL_injection) (позволяя хакерам украсть и/или удалить ваши данные), или ваш SQL просто провалится, например для 'LastName = 'O'Malley''. Использование 'setString()' безопасно от этих проблем, а также позволяет базе данных лучше оптимизировать SQL. – Andreas

1

Попробуйте использовать это, может быть, это решение Вашего вопроса:

db.delete(TABLE, 
    KEY1 + "=? AND " + KEY2 + "=? AND " + 
    KEY3 + "=? AND " + KEY4 + "=?", 
    new String[] {param1, param2, param3, param4}); 

Если вы используете обычный выберите использование этого:

db.delete(TABLE,"Column1='value1' and column2 like 'value2'...", null); 
+0

Хорошо, но я использую классический способ, как «SELECT * FROM table_name» или «DELTE FROM table_name WHERE name = 'John' AND surname = 'Doe' ". Не могли бы вы рассказать мне, как сделать это прямо там, чтобы быть похожим на этот код? –

+0

@ J.Arbet см. Обновленный ответ – Abdelhak

Смежные вопросы