JDBC基础2

关闭资源的正确方式

private static void closeRs(ResultSet rs) {
		try {
			if(rs != null) {
				rs.close();	
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			rs = null;
		}
	}

按照与创建顺序相反的顺序去关闭,即先关闭ResultSet,再关闭Statement,最后关闭Connection。在关闭的时候还要判断是否为空指针。


在JDBC4.0版本之后,其实已经在源代码中自动加载了驱动,不需要我们再次加载,即我们可以直接建立连接

// 在JDBC4.0版本之后,已经自动加载了驱动,所以我们可以不用再次加载
			// ???
			// Class.forName("com.mysql.cj.jdbc.Driver");
			// 在driver类源代码中有一个static代码块,会一加载就注册一个驱动,这里再注册就注册两个驱动了,为了防止这一情况,就用class.forName注册驱动
			// DriverManager.registerDriver(new Driver());

			// 2.建立连接
			conn = DriverManager.getConnection(url, name, password);

Statement对象引发的安全问题

Statement对象执行sql语句,其实是先拼接sql语句,然后再一起执行,这里就会出现安全隐患,即在核对密码之后加上一个恒成立的条件就可使用sql语句永远能查询到数据,这在执行登录判断时是极不安全的。

在这里就引入了PrepareStatement对象,它会先对sql语句进行预处理,使用占位符‘?’ ,将后面传进来的参数都当成是一个字符串而不会出现特殊字。

String sql = "select * from t_user where username=? and password=?";
			// 预先对sql语句执行语法的检验,占位符对应的内容,不管后面传什么进来都当成是一个字符串
			ps = conn.prepareStatement(sql);
			ps.setString(1, username);
			ps.setString(2, password);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值