哪个更快?声明或PreparedStatement

Ifo*_*est 8 java jdbc

通常,在网络中可以找到这样的代码:

private static final String SQL = "SELECT * FROM table_name";
....
Run Code Online (Sandbox Code Playgroud)

并且对于此SQL查询使用PreparedStatement.为什么?
据我所知,PreparedStatement花时间预编译SQL语句.事实证明,Statement比PreparedStatement更快.或者我错了?

chr*_*ann 13

当您必须使用不同的数据多次运行相同的语句时,准备语句要快得多.这是因为SQL只会验证一次查询,而如果您只使用一个语句,它将每次验证查询.

使用PreparedStatements的另一个好处是避免导致SQL注入漏洞 - 尽管在您的情况下您的查询非常简单,但您没有遇到过.

对于您的查询,运行预准备语句与语句之间的区别可能是微不足道的.

编辑:在回复下面的评论时,您需要仔细查看DAO类,看看它在做什么.例如,每次调用该方法时,它都会重新创建预准备语句,那么您将失去使用预准备语句的任何好处.

你想要实现的是你的持久层的封装,这样它们就不会特别调用MySQL或Postgres或你正在使用的任何东西,同时利用诸如预处理语句之类的性能和安全性优势.要做到这一点,您需要依赖Java自己的对象,如PreparedStatement.

我个人会构建自己的DAO类进行CRUD操作,使用下面的Hibernate和Java Persistence API来封装它,并且应该使用预准备语句来获得安全性.如果你有一个特定的用例来进行重复操作,那么我倾向于将它包装在它自己的对象中.

Hibernate可以配置为通过XML文件使用您正在使用的任何数据库供应商,因此它提供了持久层的非常巧妙的封装.但是,要想做到这一点,这是一个相当复杂的产品!