java學習之PreparedStatement
來源:程序員人生 發布時間:2015-01-16 08:49:33 閱讀次數:3602次
Prepared看到這個單詞,準備的意思,PreparedStatement實則是預編譯。那末與Statement又有甚么區分呢?
PreparedStatemen有這樣的好處:
1.避免重復編寫多個結構類似的sql語句
2.沒有拼接字符串的煩惱
3.避免sql注入(拼接字符串 會帶來sql注入問題)
4.sql語句預編譯在PreparedStatement對象中,性能好
曾在學習《牛腩新聞發布系統》的時候,牛老師講過“sql語句注入”這樣的知識,其實到了java還是會存在這樣的問題,PreparedStatement就完善的解決了這樣的問題。
這樣我就添加1個DRP中的實例,來共同學習1下吧。
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 添加用戶
* @param user
*/
public void addUser(User user) {
String sql = "insert into t_user (user_id, user_name, password, contact_tel, email, create_date) " +
" values (?, ?, ?, ?, ?, ?)"; //插入新用戶
Connection conn = null; //實例化PreparedStatement和結果集
PreparedStatement pstmt = null; //實例化PreparedStatement和結果集
try {
conn = DbUtil.getConnection(); //得到sql語句
pstmt = conn.prepareStatement(sql); //預編譯的作用在這體現出來了。
pstmt.setString(1, user.getUserId()); //用戶Id
pstmt.setString(2, user.getUserName()); //用戶姓名
pstmt.setString(3, user.getPassword()); //用戶密碼
pstmt.setString(4, user.getContactTel()); //用戶電話號碼
pstmt.setString(5, user.getEmail()); //用戶郵箱
//pstmt.setTimestamp(6, new Timestamp(System.currentTimeMillis()));
pstmt.setTimestamp(6, new Timestamp(new Date().getTime()));
pstmt.executeUpdate();
}catch(SQLException e) {
e.printStackTrace(); //截取異常的處理
}finally {
DbUtil.close(pstmt);
DbUtil.close(conn);
}
}
這只是1部份代碼,但是很詳細的體現了PreparedStatement的用法。關于底層的利用應當就是固定的知識,當自己見很多了,也就沒有之前的那種心慌了。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈