Statement和PreparedStatement的功能主要是對sql語句的執行
區別
(1)Statement每執行一條sql語句就需要生成一條執行計划,執行100條就需要100條執行計划PreparedStatement在執行相同
功能的sql語句,但僅僅是參數不同時,則只需要編譯一次,更適合批量處理
(2)PreparedStatement中的SQL語句是可以帶參數的,避免了用字符串連接拼接SQL語句的麻煩和不安全
例如sql語句
select * from user where id=1select * from user where id=2
如果用Statement語句執行則需要生成兩個執行計划而PreparedStatement則只需要編譯一次,執行時僅僅是換個參數而已所以當
在執行大量的功能重復的語句時,效率會成百倍的提升。
兩者的使用:
首先連接數據庫 這都是相同的 String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "root"; String sql = "select * from goods where goodsid = 123"; DriverManager.registerDriver(new com.mysql.jdbc.Driver());//注冊數據庫驅動 Connection conn = DriverManager.getConnection(url, user, password);//連接數據庫Statement在執行sql語句時不能再sql語句中設置參數
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
int id = rs.getInt("goodsid");
String name = rs.getString("goodsname");
int price = rs.getInt("costprice");
String manufacturer = rs.getString("manufacturer");
System.out.println(id+" "+name+" "+price+" "+manufacturer);
}
rs.close();
conn.close();
st.close(); PreparedStatement執行sql語句
PreparedStatement pst = conn.prepareStatement(sql1); pst.setInt(1,789);//第一個參數指的是sql語句中第幾個參數(問號),第二個參數為?處要填的值 pst.setString(2, "大米"); pst.setInt(3, 220); pst.setInt(4, 500); pst.setString(5,"大米公司"); pst.executeUpdate(); conn.close(); pst.close();參考:http://blog.csdn.net/jiangwei0910410003/article/details/26143977
