JDBC——DAO和Statement的安全问题06

DAO(Data Access Object)

所谓的DAO就是把连接数据库的前期工作都做好,提供几个方法来给用户调用而已。


为了未来能够方便修改,尽量定义接口,然后实现接口。


  1. 新建一个dao的接口,里面声明数据库访问规则
  2. 新建一个dao的实现类,具体实现早前定义的规则
  3. 直接使用实现

Statement的安全问题主要是:账号密码的登录需要拼接成一条sql语句去操作数据库,但这可能有会使得别人利用账号密码的填写来拼接出非法的sql去操作数据库

解决办法

PrepareStatement ps = conn.prepareStatement(String sql)

案例代码(记得要重载那些释放的方法)

public void login(String username, String password) {
		
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;
		try {
			//1. 获取连接对象
			conn = JDBCUtil.getConn();
			//2. 创建statement对象 
			String sql = "select * from t_user where username=? and password=?";
			
			//预先对sql语句执行语法的校验, ? 对应的内容,后面不管传递什么进来,都把它看成是字符串。 or select 
			PreparedStatement ps = conn.prepareStatement(sql);
			//? 对应的索引从 1 开始。 
			ps.setString(1, username);
			ps.setString(2, password);
			
			rs = ps.executeQuery();
			if(rs.next()){
				System.out.println("登录成功");
			}else{
				System.out.println("登录失败");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			JDBCUtil.release(conn, st, rs);
		}
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值