翻阅大大小小的博客,无论中外只要你搜索PreparedStatement这个关键字,得到的大多数结果是在重复执行一条语句多次的情况下PreparedStatement会获得比Statement更好的性能,辟如下文引用的这段文字。
选择PreparedStatement还是Statement取决于你要怎么使用它们. 对于只执行一次的SQL语句选择Statement是最好的. 相反, 如果SQL语句被多次执行选用PreparedStatement是最好的.
PreparedStatement的第一次执行消耗是很高的. 它的性能体现在后面的重复执行.
没错,jdbc中PreparedStatement的初衷除了防止sql注入以外,还有一个功能就是让用户在执行重复的sql能够提高运行效率,对于效率的提升主要体现在了省去了sql语句编译的时间。但是在实际的使用中,还是有不少门道的。
首先来看两段代码,测试的表结构如下:
id | first | second |
---|---|---|
bigint(11) AUTO_INCREMENT | varchar(10) | varchar(10) |
public void preparedGet(int first) {
Connection conn = getConnection();
String sql = "select * from test_table where first = ?";
PreparedStatement pst = null;
ResultSet rs = null;
try {
pst = conn.prepareStatement(sql);
pst.setString(1, "" + first);
int loop = 0;
while(loop < 5) {
rs = pst.executeQuery();
rs.close();
loop++;
}
pst.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void simpleGet(int first) {
Connection conn = getConnection();
String sql = "select * from test_table where first = '" + first + "'";
Statement stmt = null;
ResultSet rs = null;
try {
stmt = conn.createStatement();
int loop = 0;
whi