PreparedStatement與Statements相比主要有以下優(yōu)點:
1.PreparedStatement能夠執(zhí)行參數(shù)化的SQL語句,避免反復(fù)書寫相同SQL語句的繁鎖。
參數(shù)化SQL語句具體如下:
SELECT sname FROM student WHERE sid = ?;
"?"是參數(shù)的占位符咒劲,程序可以傳入不同的sid值完成參數(shù)化查詢。
2.PreparedStatement比Statements效率更高
因為數(shù)據(jù)庫系統(tǒng)會對SQL語句進(jìn)行預(yù)編譯處理忧风。
3.PreparedStatement可以防止SQL注入攻擊
PreparedStatement 對象通過executeUpdate()方法實現(xiàn)對數(shù)據(jù)庫的寫入勒魔,通過executeQuery()方法實現(xiàn)查詢。具體如下:
package com.qfedu.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class TestJDBC02 {
public static void main(String[] args) throws Exception {
//加載并注冊數(shù)據(jù)庫驅(qū)動
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/chapter01?serverTimezone=GMT";
String name="root";
String password="123456";
//獲取數(shù)據(jù)庫連接
Connection conn=DriverManager.getConnection(url, name, password);
//書寫SQL語句
String sql="select * from student where sname = ?"; //一個問號代表一個占位符
//獲取執(zhí)行者對象
PreparedStatement pstat=conn.prepareStatement(sql);
//設(shè)置參數(shù)
pstat.setString(1, "zhangsan"); //1代表第一個問號占位符
//執(zhí)行SQL語句
ResultSet resultSet=pstat.executeQuery();
System.out.println("sid|sname|age|course");
//處理結(jié)果集
while(resultSet.next()) {
int sid=resultSet.getInt("sid");
String sname=resultSet.getString("sname");
String age=resultSet.getString("age");
String course=resultSet.getString("course");
System.out.println(sid+"|"+sname+"|"+age+"|"+course);
}
resultSet.close();
pstat.close();
conn.close();
}
}