SQL注入

1 Statement和PreparedStatement的特点
  a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录
  b)对于创建和删除表或数据库,我们可以使用execute(),该方法返回false,表示创建和删除数据库表
  c)除了select操作返回true之除,其它的操作都返回false
  d)PreparedStatement有发下的特点:      
    >>解决SQL注入问题,在绑定参数时,动态检测
    >>在发送相同结构的SQL时,较Statement效率有所提升
    >>使用?占位符替代真实的绑定值

    >>项目中,优先使用PreparedStatemen

//基于JDBC的CURD操作
public class Crud {
	public void create(String name,String gender,float salary){
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		//问号表示某一类型的数据
		String sql = "insert into user(name,gender,salary) values(?,?,?)";
		try {
			conn = JdbcUtil.getMySqlConnection();
			pstmt = conn.prepareStatement(sql);
			//设置占位符参数名与返回值
			pstmt.setString(1,name);
			pstmt.setString(2,gender);
			pstmt.setFloat(3,salary);
			pstmt.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			JdbcUtil.close(rs);
			JdbcUtil.close(pstmt);
			JdbcUtil.close(conn);
		}
	}
	public void read(String name){
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		//使用PreparedStement的参数使用占位符替代
		String sql = "select * from user where name = ?";
		try {
			conn = JdbcUtil.getMySqlConnection();
			pstmt = conn.prepareStatement(sql);
			//能过setXxxx()方法为占位符赋值,
			//在赋值的过程中动态检测,预防SQL注入问题的发生
			pstmt.setString(1,name);
			rs = pstmt.executeQuery();
			while(rs.next()){
				name = rs.getString("name");
				String gender = rs.getString("gender");
				System.out.println(name+":"+gender);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			JdbcUtil.close(rs);
			//多态原则
			JdbcUtil.close(pstmt);
			JdbcUtil.close(conn);
		}
	}
	public static void main(String[] args) {
		Crud crud = new Crud();
		//crud.read(" 'or true or' ");
		crud.create("tim","male",5000);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值