社区
Java SE
帖子详情
prepareStatement 的问题
luoxudong121316
2012-07-25 05:03:35
用prepareStatement 设置参数,速度超级慢,还不如直接拼接字符串,有人能告诉我为什么吗?
...全文
173
8
打赏
收藏
prepareStatement 的问题
用prepareStatement 设置参数,速度超级慢,还不如直接拼接字符串,有人能告诉我为什么吗?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
learningBird
2012-07-26
打赏
举报
回复
只知道prepareStatement一般比拼接快
为什么你的会这么慢 等高手。
sl_nevergiveup
2012-07-26
打赏
举报
回复
能用prepareStatement就一定要用 ,尽量少用字符串拼接,假设有一个发表文章的场景,文章的内容通过编辑器会带有各种样式,所以真正插入到数据库里的是HTML的代码,会带有许多单引号,如果使用字符串拼接的话这些单引号会改变sql语句的原意,从而造成插入失败。
同时,如果有人刻意提交恶意表单来改变你sql语句的原意,就会查询出你数据库里的一些保密的信息,这就是sql注入。
luoxudong121316
2012-07-26
打赏
举报
回复
这句有问题吗?
[Quote=引用 5 楼 的回复:]
for (Object object : param) {
i++;
ps.setObject(i, object);
}
[/Quote]
wwwcomcn123
2012-07-25
打赏
举报
回复
for (Object object : param) {
i++;
ps.setObject(i, object);
}
luoxudong121316
2012-07-25
打赏
举报
回复
Connection connection = getConn();
PreparedStatement ps = null;
ResultSet records = null;
try {
String hql = "select * from (select rownum rid,m.* from " +
"(select t.vehiclelsh,t.plateinfo,t.platetype,t.passtime,t.vehiclespeed from bayonet_vehiclepass t" +
" where passtime>to_date('012-2-25 0:00:00','yyyy-MM-dd hh24:mi:ss') and passtime < to_date('2012-7-25 0:00:00','yyyy-MM-dd hh24:mi:ss')" +
" and vehiclespeed > ? and vehiclespeed < ? order by passtime desc) m where rownum < 35464 ) s where s.rid > 35453";
List param = new ArrayList();
param.add(0);
param.add(200);
String hql1 = "select count(*) from bayonet_vehiclepass";
ps = connection.prepareStatement(hql);
int i = 0;
for (Object object : param) {
i++;
ps.setObject(i, object);
}
Long l1 = System.currentTimeMillis();
records = ps.executeQuery();
System.out.println(System.currentTimeMillis()-l1);
} catch (Exception e) {
e.printStackTrace();
} finally {
closeConn(ps, records, connection);
}
我这边只设置两个参数就很慢了,如果把时间也设置上去就更慢了,要13秒左右,如果用拼接字符串就只要不到1秒
brightyq
2012-07-25
打赏
举报
回复
应该影响不大吧。怎么会呢?
屌丝哥
2012-07-25
打赏
举报
回复
同样的数据条件下肯定prepareStatement要快,不知LZ为何这般慢
能否把你的SQL部分贴出来?
SpringHiSay
2012-07-25
打赏
举报
回复
静等高手解答...
Java数据库JDBC——pre
pa
re
Statement
的用法和解释
转自:http://blog.csdn.net/QH_JAVA/article/details/48245945 一、pre
pa
re
Statement
的用法和解释 1.Pre
pa
red
Statement
是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程 2.使用
Statement
对象。在对数据库只执行一次性存取的时侯,用
Statement
对象进行处理。Pre
pa
red...
面试题:
Statement
与Pre
pa
re
Statement
的区别
Statement
用于执行静态SQL语句,在执行时,必须指定一个事先准备好的SQL语句。 Pre
pa
re
Statement
是预编译的SQL语句对象,sql语句被预编译并保存在对象中。被封装的sql语句代表某一类操作,语句中可以包含动态参数“?”,在执行时可以为“?”动态设置参数值。 使用Pre
pa
re
Statement
对象执行sql时,sql被数据库进行解析和编译,然后被放到命令缓冲区,每当执行同一个Pre
pa
re
Statement
对象时,它就会被解析一次,但不会被再次编译。在缓冲区可以发现预编..
Pre
pa
re
Statement
和
Statement
的对比
Pre
pa
re
Statement
和
Statement
的对比
2、Pre
pa
re
Statement
和
Statement
的区别
场景再现: 我一直以为只是面试时会遇到的小知识点,结果刚刚工作的我就发现项目中的一个小程序,用的
Statement
。所以回顾他们有什么区别? 答案: 1、都是接口,但Pre
pa
re
Statement
继承了
Statement
。 2、Pre
pa
re
Statement
可以使用占位符,用“?”占位,是预编译时期替换为 值。批处理比
Statement
高。而
Statement
只能执行静态sql,即:字符串 3、Pre
pa
re
Statement
使用方法:
Statement
使用方法: .
create
Statement
和 pre
pa
re
Statement
的区别:
概念上: 1、pre
pa
re
Statement
会先初始SQL,先把这个SQL提交到数据库中进行预处理,多次使用可提高效率; 2、create
Statement
不会初始化,没有预处理; 变量上: pre
pa
re
Statement
可以在SQL中用 ?替换变量,可以保证SQL安全
问题
,防止SQL注入; create
Statement
只能在SQL中拼接参数,容易造成SQL注入; 功能上: 如果想要删除多条数据,对于create
Statement
需要写多条SQL语句; 而pre
pa
re
Statement
通过s
Java SE
62,634
社区成员
307,269
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章