总结
PrepareStatement
- prepareStatement和Statement的区别:
- 都是语句对象
- ps是st的子类
- ps可以防止sql注入问题,还可以减少字符串拼接的麻烦
- 在数据库有缓存区的情况下ps的效率比st的效率高
事务
-
事务:
一组操作,要么都成功,要么都失败
- 四大特性(ACID)
- 原子性:最小的单位
- 一致性:整个操作完成后总的不变
- 隔离性:解决并发问题
- 持久性:存在硬盘中不变
- 四大特性(ACID)
-
JDBC中事务:
- JDBC每执行一次语句,就会自动提交事务,这样需要多个事务连接使用时,就不行
- 步骤:
- 需要我们自己将自动提交事务关了(conn.setAutoCommit(false)😉
- 然后提交的时候自己提交(conn.commit())
- 功能异常:conn.rollback()
添加数据是获取id
- 语句对象添加数据时拿主键:
- 返回主键这个功能默认关闭的,否则影响性能
- 语句对象:
- 执行sql语句时,将返回主键打开(Statement.RETURN_GENERATED_KEYS)
- 获取结果集,通过结果集索引得到主键(rs = stm.getGeneratedKeys())
- 预编译语句对象:
- 放入sql模板时(没有数据),在后面将返回主键打开(Statement.RETURN_GENERATED_KEYS)
- 获取结果集,通过结果集索引得到主键(rs = stm.getGeneratedKeys())
连接池
- 连接池:
- DBCP、C3P0、Druid、Hikari
- 相当于装连接对象的容器(相当于一个框架),可以提高效率,第三方的,需要导包
- 步骤:
- 导包(两个,dbcp和pool)
- 找到框架的关键(核心)对象
- 通过核心对象获取链接:
- new核心对象配置四大金刚,再获取连接对象
- 通过工厂创建对象(并且将配置文件放入,注意:这里的配置属性有规范),再获取连接对象
工具类的抽取
- 只对增删改进行了抽取,因为很多的代码重复,只有SQL和参数不一样