使用Statement的時候:
Class.forName(driver);
conn = DriverManager.getConnection(url, username, password);
stmt = conn.createStatement(); //沒有預編譯sql
String sql;
sql="select * from stu_info";
ResultSet rs = stmt.executeQuery(sql); //傳入sql語句
使用PreParedStatement的時候:
Class.forName("com.mysql.jdbc.Driver");
String sql = "update book set bookCount=? where id=?";
Connection conn = DriverManager.getConnection(url,username,password);
PreparedStatement ps = conn.prepareStatement(sql); //連接數據庫時候預編譯sql語言
ps.setInt(1, bookCount);
ps.setInt(2, id);
ps.executeUpdate();//不需要再傳入sql
ps.close();
conn.close();
可以看出PreparedStatement在連接數據庫的時候會預編譯sql語言,所以執行多條sql語句時效率會高很多。並且PreparedStatement可以使用佔位符。最重要的是極大地提高了安全性,防止類似於 select * from tb_name = '隨意' and passwd = ' ' or '1' = '1';的惡意sql語法。執行一條sql語句時,Statement效率高。