--在初学Java时, 我使用JDBC和数据库进行连接时,用到了PreparedStatement和Statement,为了更深入地了解它们的异同,于是去写一个类来测试PreparedStatement和Statement那个更高效,想毕,码友们心中已经有答案了。
--我是使用springboot进行测试的,建立的是Maven工程,然后通过本地仓库加载mysql的jar包,在mysql的jar包中找到com.mysql.jdbc.Driver,复制它的类全名来加载驱动的
package com
.cy
.test
;
import java
.sql
.Connection
;
import java
.sql
.DriverManager
;
import java
.sql
.PreparedStatement
;
import java
.sql
.ResultSet
;
import java
.sql
.Statement
;
public class TestPs {
public static void main(String
[] args
) throws Exception
{
Class
.forName("com.mysql.jdbc.Driver");
String url
="jdbc:mysql:///travel?serverTimezone=GMT+8&characterEncoding=utf8";
String user
= "root";
String password
= "root";
Connection conn
= DriverManager
.getConnection(url
, user
, password
);
String sql
="select * from scenic where id=";
String tempSql
;
int count
=1000;
Long time
= System
.currentTimeMillis();
for (int i
= 0; i
<count
; i
++) {
Statement statement
= conn
.createStatement();
tempSql
=sql
+(int)(Math
.random()*10);
ResultSet rs
=statement
.executeQuery(tempSql
);
statement
.close();
}
System
.out
.println("statement cost:"+(System
.currentTimeMillis()-time
));
String psql
="select * from scenic where id=?";
Long ptime
= System
.currentTimeMillis();
for (int i
= 0; i
<count
; i
++) {
int id
=(int)Math
.random()*10;
PreparedStatement ps
= conn
.prepareStatement(psql
);
ps
.setLong(1, new Long(id
));
ResultSet prs
=ps
.executeQuery();
ps
.close();
}
System
.out
.println("preparedstatement cost:"+(System
.currentTimeMillis()-ptime
));
conn
.close();
}
}
从代码中,我们可以看出PreparedStatement和Statement的不同点:
1.创建: Statement statement = conn.createStatement(); PreparedStatement ps= conn.prepareStatement(psql); 执行: ResultSet rs=statement.executeQuery(tempSql); ResultSet prs=ps.executeQuery(); –这里说明了,PreparedStatement是先预编辑SQL语句的,之后的执行就不用再每次都进行解析和编译,而Statement每次都要进行解析和编译
2.SQL语句: String sql=“select * from scenic where id=”; String psql=“select * from scenic where id=?”; –这里说明了,PreparedStatement是防止SQL注入的,然后 3.执行时长: statement cost:1454 preparedstatement cost:732 statement cost:1263 preparedstatement cost:886 statement cost:1608 preparedstatement cost:959 –这里说明了,PreparedStatement是执行比Statement更加高效 最后进行一个小堂测试:
(单选题)关于PreparedStatement与Statement描述错误的是()
A.一般而言PreparedStatement比Statement执行效率更高
B.PreparedStatement会预编译SQL语句
C.Statement每次都会解析/编译SQL,确立并优化数据获取路径
D.PreparedStatement执行扫描的结果集比Statement小