将SQL IN子句与实例一起使用的最佳解决方法java.sql.PreparedStatement是什么,由于SQL注入攻击安全问题,多个值不支持这种解决方法:一个?占位符代表一个值,而不是值列表.
请考虑以下SQL语句:
SELECT my_column FROM my_table where search_column IN (?)
Run Code Online (Sandbox Code Playgroud)
使用preparedStatement.setString( 1, "'A', 'B', 'C'" );本质上是一种非工作尝试,?首先使用的原因是解决方法.
有哪些变通方法?
如何在Android中的SQlite中使用预准备语句?
是否可以将表中的某个值增加一定数量而不读取最后一个值然后更新它?
即我有"产品"和"质量"栏目:产品:iLamp质量:50
我希望用x增加(或降低)质量.为了达到这个目的,我首先阅读最后一个值(50),增加或减少它,并将其写回.
有没有直接的方法来完成这项任务?
我听说过SQLite准备好的语句可以提高性能.我写了一些代码来测试它,并没有看到使用它们的性能有任何差异.所以,我想也许我的代码不正确.如果您发现我这样做有任何错误,请告诉我......
[self testPrep:NO dbConn:dbConn];
[self testPrep:YES dbConn:dbConn];
reuse=0
recs=2000
2009-11-09 10:39:18 -0800
processing...
2009-11-09 10:39:32 -0800
reuse=1
recs=2000
2009-11-09 10:39:32 -0800
processing...
2009-11-09 10:39:46 -0800
-(void)testPrep:(BOOL)reuse dbConn:(sqlite3*)dbConn{
int recs = 2000;
NSString *sql;
sqlite3_stmt *stmt;
sql = @"DROP TABLE test";
sqlite3_exec(dbConn, [sql UTF8String],NULL,NULL,NULL);
sql = @"CREATE TABLE test (id INT,field1 INT, field2 INT,field3 INT,field4 INT,field5 INT,field6 INT,field7 INT,field8 INT,field9 INT,field10 INT)";
sqlite3_exec(dbConn, [sql UTF8String],NULL,NULL,NULL);
for(int i=0;i<recs;i++){
sql = @"INSERT INTO test (id,field1,field2,field3,field4,field5,field6,field7,field8,field9,field10) VALUES (%d,1,2,3,4,5,6,7,8,9,10)";
sqlite3_exec(dbConn, [sql UTF8String],NULL,NULL,NULL);
} …Run Code Online (Sandbox Code Playgroud)