JDBC

来源:互联网 发布:在职研究生网络教育 编辑:程序博客网 时间:2024/06/01 08:17

本文是较早版本JDBC文章,最新版在JDBC

1、先来一个简单的例子Java连接数据库的简单例子
这个例子基本上包含了数据库操作需要的全部步骤,当然其中有很多缺点。

2、对这些缺点进行修改,主要就是建立一个工具类(这个工具类在之后还会有多次修改)

  • 静态代码块的工具类 一般使用这个
  • 单例模式建立工具类

3、建立连接后,就要进行数据库的增删改查操作了,在增删改查中,也就查(Query)比较复杂,也是最常用的,其他的都比较简单(增删改都是Updata)

4、前面查询用到的是Statement,它查询用到的sql语句只能通过拼接的方式产生,这样就会出现sql注入的问题。为此,可以使用PreparedStatement,它不仅解决了sql注入问题,速度也比Statement快。

5java.sql中的Date类型和java.util 中的日期类型不一样所以还必须注意两者之间的转换:jdbc中的日期类型问题

6、数据库中不仅可以存储 char text int 这样的基本数据类型,还可以存储长文本,和二进制文件(如图片)等:

  • 数据库中使用Clob处理长文本
  • 数据库中使用Blob处理二进制数据

这其中用到的数据库的内容并不复杂,主要就是涉及到输入输出流的问题。

7、前面用到的例子都是在控制台输出结果,这显然没有用,所以
我们根据三层架构重新建立代码:
Dao的实现与测试(比较好的代码)
这些代码是比较规范的,可以用在一般的小程序中了。
还有一种更好的使用工厂模式实现UserDao 的方式Dao工厂模式(代码比较好)

8、事务:事务是为了保证数据库安全性而设计的,一般的jdbc都是将事务设置成自动提交的,可以手动设置称不自动提交:
事务1这个例子当发生回滚时,整个事务都取消,如果不想全部取消,可以设置保存点savePoint事务–保存点

9、有时候会需要获取刚刚插入的记录的主键:返回刚插入的数据的主键 其中使用的是PrepareStatament 的重构,PrepareStatament 有多种重构,各自有不同的作用。

10、当有1000条数据需要操作时,可以使用打包,批处理

11、结果集中的数据不仅可以向后滚动,还可以向前滚动,定位等等操作。可滚动的结果集,向前滚动,绝对定位、在一些不支持分页技术的数据库中,可以使用这个进行分页 。

12、元数据信息:

  • 可以通过 DatabaseMetaData 获取数据库的元数据
  • ResultSetMetaData 结果集元数据的应用:利用结果集元数据将查询结果封装成Map

13、反射,反射使用起来很灵活,但是可读性太差

  • 反射1:给定类,构造一个对象
  • 反射2:获取类的属性,方法(通过方法名调用方法),声明
  • 反射3:利用java反射技术将查询结果封装成对象

14、上面的例子利用反射将查询结果封装称一个User对象,本例也是利用反射,将查询结果封装成Object对象 将查询结果封装成Object对象,然后在转成想要的对象。

15、连接池:之前的例子中,每次程序结束都会关闭连接,这样太浪费资源,可以使用连接池的方式优化。
连接池1 这只是对连接池的简单演示,还可以对他进行一些优化,如连接池2:对数据源的简单优化。这些例子中要使用free() 函数将连接放回到连接池中,如果不小心调用了close() 方法,就会将连接关闭,为了避免这种事情发生可以进一步优化(代理模式),这个例子中实现了Connection接口,这样就要实现他的所有的方法,这样做显然太复杂,所以可以使用动态代理

16、前面提到了数据源,并且自己写了几个数据源例子,但是都没有实现·DataSource接口。
数据源有很多好处,但是实现起来太麻烦,好在现在有很多开源实现,比如一个现成的数据源:DBCP

17、对于前面第7条中DAO代码的优化
将代码中公共的部分提取到超类中,不同的部分有各个子类负责

18、JdbcTemplate
JdbcTemplate是由Spring框架提供的一个工具类,他对Jdbc API提供了很好的封装,可以用来完全替代JDBC API

  • 使用JdbcTemplate查询
  • 使用JdbcTemplate添加新记录

19、支持参数命名的JdbcTemplate

工具类1:从2开始使用
工具类2:用于15
工具类3:用于15
工具类4:用于16,17

0 0
原创粉丝点击