对于相同的SQL语句,Statement对象只会对其编译执行一次吗
发布网友
发布时间:2022-04-09 07:55
我来回答
共2个回答
热心网友
时间:2022-04-09 09:25
一次编译,多次执行
热心网友
时间:2022-04-09 10:43
PreparedStatement比Statement有什么优势?查看全部2个回答
我来答
我来答
查看全部2个回答

dayinspring
来自科学教育类芝麻团 推荐于 2017-09-15
一、PreparedStatement相比于Statement,有三个优点:
一)代码的可读性和可维护性。
从代码来看,用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无论从可读性还是可维护性上来说,都比直接用Statement的代码高很多档次。
二)PreparedStatement尽最大可能提高性能。
每一种数据库都会尽最大努力对预编译语句提供最大的性能优化,因为预编译语句有可能被重复调用,所以语句在被DB的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中(相当于一个函数)就会得到执行。这并不是说只有一个Connection中多次执行的预编译语句被缓存,而是对于整个DB中,只要预编译的语句语法和缓存中匹配,那么在任何时候就可以不需要再次编译而可以直接执行。而statement的语句中,即使是相同一操作,而由于每次操作的数据不同所以使整个语句相匹配的机会极小,几乎不太可能匹配。比如:
insert into tb_name (col1,col2) values ('11','22');
insert into tb_name (col1,col2) values ('11','23');
即使是相同操作但因为数据内容不一样,所以整个个语句本身不能匹配,没有缓存语句的意义,事实是没有数据库会对普通语句编译后的执行代码缓存。