JDBC知识点
2021-04-17 09:50:18 0 举报
AI智能生成
jdbc
作者其他创作
大纲/内容
①JDBC介绍
Java Data Base Connectivity
它是可以执行SQL语句的Java API
sun公司只是提供了JDBC API【接口】,数据库厂商负责实现
④:PreparedStatment和Statement区别
1.Statement会频繁编译SQL。
1.PreparedStatement可对SQL进行预编译,提高效率,预编译的SQL存储在PreparedStatement对象中
2.Statement对象编译SQL语句时,如果SQL语句有变量,就需要使用分隔符来隔开,如果变量非常多,就会使SQL变得非常复杂。
2.PreparedStatement可以使用占位符,简化sql的编写
3. 正因为Statement对象需要拼接,那么可能会有SQL注入问题
3.PreparedStatement使用占位符,没有SQL注入问题
4.Statement批处理可以 可以向数据库发送不同的SQL语句
4.PreparedStatement批处理只能对同一种类型的SQL语句
⑤API实战
获取自动增长主键列
设置了主键为自动增长的话,我们很多时候在业务上是需要得到主键去进行其他操作的(插入操作)。
通过getGeneratedKeys得到主键列
处理二进制和大文本数据
Oracle
Oracle使用的是BLOB这个字段来进行操作
获取到Oracle的BLOB对象,把二进制数据放到这个指针里面,指针指向BLOB字段
Mysql
使用setCharacterStream()处理大文本
使用setBinaryStream()处理二进制
调用数据库的存储过程
使用的是CallableStatement对象来进行调用
存储过程语法: {call [(,, ...)]}
函数的语法:{?= call [(,, ...)]}
元数据
元数据其实就是数据库,表,列的定义信息
利用元数据可以对我们的工具类再进行抽象和封装,形成更加好用的组件
⑧数据库连接池
原生JDBC频繁地打开、关闭连接造成系统性能低下,因此需要数据库连接池
自己编写数据库连接池
连接使用List集合来进行装载,初始化多个Connection,需要连接时就把集合的元素返回出去
使用动态代理来实现把资源返回给List集合。
开源数据库连接池
C3P0
DBCP
C3P0
DBCP
②JDBC编码步骤
导入MySQL或者Oracle驱动包
装载数据库驱动程序(Driver)
获取到与数据库连接(Connection)
获取可以执行SQL语句的对象(Statement)
执行SQL语句(增删改查)
得到执行SQL返回的结果(ResultSet)
关闭连接(close资源)
③写一个简单工具类
由于每次使用JDBC都会有相同的代码:获取Connection、close资源
因此,我们写一个简单的工具类来获取Connecion和close资源。减少重复的代码
driver、url、username、password是经常会变的,写在配置文件上是一种不错的选择
⑥事务
一个SESSION所进行的所有更新操作要么一起成功,要么一起失败
Serializable【可避免脏读,不可重复读,虚读】Repeatable read【可避免脏读,不可重复读】Read committed【可避免脏读】Read uncommitted【级别最低,什么都避免不了】
⑦工具类升级版
有了元数据API基础,我们可以使用策略模式来实现封装
结果集的操作交由调用者来进行实现,而我仅仅定义接口的行为
⑨使用dbutils框架
dbutils框架其实就是类似我上面升级版的工具类,它是官方的组件
该类简化了SQL查询,配合ResultSetHandler使用,可以完成大部分的数据库操作,大大减少了代码量
⑩实现分页
mysql
Mysql分页语法: @start---偏移量,不设置就是从0开始【也就是(currentPage-1)*lineSize】 @length---长度,取多少行数据
oracle
Oracle分页: Oracle的分页依赖于ROWNUM这个伪列,ROWNUM主要作用就是产生行号。 分页原理: 1:子查询查出前n行数据,ROWNUM产生前N行的行号 2:使用子查询产生ROWNUM的行号,通过外部的筛选出想要的数据
0 条评论
下一页