首页 > 代码库 > java学习之PreparedStatement

java学习之PreparedStatement

     Prepared看到这个单词,准备的意思,PreparedStatement实则是预编译。那么与Statement又有什么区别呢?
     PreparedStatemen有这样的好处:
       1.防止重复编写多个结构类似的sql语句
  2.没有拼接字符串的烦恼
  3.防止sql注入(拼接字符串 会带来sql注入问题)

  4.sql语句预编译在PreparedStatement对象中,性能好

     曾经在学习《牛腩新闻发布系统》的时候,牛老师讲过“sql语句注入”这样的知识,其实到了java还是会存在这样的问题,PreparedStatement就完美的解决了这样的问题。

     这样我就添加一个DRP中的实例,来共同学习一下吧。

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);
		}
	}
      这只是一部分代码,但是很详细的体现了PreparedStatement的用法。关于底层的应用应该就是固定的知识,当自己见得多了,也就没有以前的那种心慌了。


java学习之PreparedStatement