如何使用多个WHERE子句[SQLITE]删除
我想问的第一个问题是,使用多个where子句进行一个delete查询更快,还是一个接一个地进行查询更快? 第二,如果是这样,那么如何使用多个where子句进行delete查询?如何使用多个WHERE子句[SQLITE]删除,sqlite,Sqlite,我想问的第一个问题是,使用多个where子句进行一个delete查询更快,还是一个接一个地进行查询更快? 第二,如果是这样,那么如何使用多个where子句进行delete查询? 提前谢谢 试着用这个也许就是你问题的答案: db.delete(TABLE, KEY1 + "=? AND " + KEY2 + "=? AND " + KEY3 + "=? AND " + KEY4 + "=?", new String[] {param1, param2, param3,
提前谢谢 试着用这个也许就是你问题的答案:
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);
不能有多个
WHERE
子句,但可以使条件更复杂
如果您的表有FirstName
和LastName
,并且您希望删除John Doe
、Toby Steed
和Linda Powers
,则组合和以及或如下条件:
从MyTable中删除
其中(FirstName='John'和LastName='Doe')
或者(FirstName='Toby'和LastName='Steed')
或者(FirstName='Linda'和LastName='Powers')
现在,如果您是从Java来实现的,就不应该(永远!)使用字符串连接来构建这样的SQL语句。使用PreparedStatement
:
String sql=“从MyTable中删除”+
“其中(FirstName=?和LastName=?)”+
“或(FirstName=?和LastName=?)”+
“或(FirstName=?和LastName=?)”;
try(PreparedStatement stmt=conn.prepareStatement(sql)){
stmt.setString(1,“John”);
标准设置字符串(2,“Doe”);
标准设置字符串(3,“托比”);
固定管柱(4,“骏马”);
stmt.setString(5,“Linda”);
stmt.setString(6,“权力”);
stmt.executeUpdate();
}
你的意思是从学生中删除,其中学生Id=1,学生名为“%An%”
?@user2004685他可能是指使用或而不是和,因为他提出了替代方法来执行多个查询。是的,我想一次删除多行,如Name=John names=Doe和还有,这里name=Dog name=Barf类似的东西好吧,但我使用了经典的方式,比如“从表名中选择*”或“从表名中删除,其中name='John'和姓氏='Doe'。你能告诉我怎么把上面的东西变成这样吗?谢谢!为什么我不应该使用字符串连接来构建SQL语句呢?比如,如果我这样做是不是很糟糕?@J.Arbet,因为值(例如,John
)可能来自外部不受信任的源,并且可能是恶意的,或者仅仅包含导致SQL问题的字符,例如撇号。因此,除非您确保转义所有特殊字符,否则您很容易受到攻击(允许黑客窃取和/或删除您的数据),否则您的SQL将完全失败,例如,对于LastName='O'Malley'
。使用setString()。