1.sql注入
在我们使用Statement进行登录验证时,
用户输入用户名和密码查询是否登录成功,
Statement对象可以通过拼接sql,
然后改变sql的结构从而实现登录成功,
这种情况我们称之为sql注入
2.如何避免?
为了避免sql注入,
我们不让用户进行sql拼接即可,
而Statement这个类是可以让用户进行sql拼接的,
所以我们不再使用该类
3.PrepareStatement
-- 是Statement这个类的子类
1)支持预编译sql,将不完整的sql传入到数据库,
将参数使用?占位(?的个数从1开始),
然后再为?赋值即可
2)不支持sql的拼接,不能改变sql的结构 --- 从而避免sql注入
3)当多次执行相同结构的sql时,效率比较高
4)常用方法
ps.setXXX(index, 参数)
为第index个?赋值为参数
ps.executeQuery()
获取结果集
ps.getGeneratedKeys()
获取主键值
4.JUnit单元测试:
1)在单元测试的方法上加@Test注解
2)点击@Test注解添加junitjar包
3)书写方法public void 方法名(){}
5.书写DBUtil:
工具类 -- 提供工厂方法
获取连接
关闭连接
6.DAO(Database Access Object):
--数据库访问对象
--就是用来对数据库中的表进行增删改查操作的
如何使用DAO?
1)建表
2)建实体类 -- 与表一一对应
成员变量 -- 字段
JAVABEAN规范:
a)该类要实现序列化接口
b)该类属性私有化
c)提供get/set方法
d)提供无参构造
3)为每一个实体类创建接口
4)为每一个接口创建相应的实现类,
在实现类中实现表的增删改查
5)测试
7.连接池 :
数据库连接池负责分配、管理和释放数据库连接, 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个; 释放 空闲时间超过最大空闲时间 的数据库连接, 来避免因为没有释放数据库连接而引起的数据库连接遗漏。 这项技术能明显提高对数据库操作的性能。
8.批处理:
一次执行多条语句
批处理的方法:
ps.addBatch()
ps.executeBatch()
ps.clearBatch()
当我们在执行批处理时,要对事务进行手动管理:
1)取消事务的自动提交
conn.setAutoCommit(false);
2)执行批处理以后手动提交事务
conn.commit();
3)如果出现异常,则事务回滚
conn.rollback();
sql注入问题、PrepareStatement接口、JUnit单元测试、书写DButil工具类、DAO、连接池、批处理
最新推荐文章于 2022-09-10 14:37:17 发布