JDBC复习


1.      Jdbc基础准备 junit(单元测试的工具)

a)      main函数进行测试的问题

b)     Junit单元测试工具
替换main函数★☆♀◆◇☂ ☃ ☄ ★♧♡♂♀♠♣♥❤☜,进行java代码测试的☂ ☃ ☄ ★★☆♀◆◇。
junit工具的使用

i.         引入junit相关库文件 .jar ---- lib

ii.       创建测试类

iii.     初学者常见问题清单

1.      把测试类的名字 命名为Test 导致不能自动导报

2.      测试方法没有加入 @Test注解导致如下2个问题

a)      测试方法不能运行

b)     出现异常

3.      技巧
应用F2快捷键 可以自动引入junit测试库

2.      JDBC技术的引言

a)      什么是JDBC技术
应用Java程序★☆♀◆◇☂ ☃ ☄ ★♧♡♂♀♠♣♥❤☜,访问操作数据库☂ ☃ ☄ ★★☆♀◆◇。底层代码☂ ☃ ☄ ★★☆♀◆◇。

b)     JDBC访问数据库的核心思想

c)      JDBC的编程步骤
环境搭建  导入 oracle的驱动jar

1.      加载驱动 目的 oracle对于3个接口的实现读入程序中☂ ☃ ☄ ★★☆♀◆◇。

2.      创建连接Connection  注意:提供用户名 密码

3.      创建PreparedStatement执行sql语句  注意提供sql语句

4.      若进行的查询操作★☆♀◆◇☂ ☃ ☄ ★♧♡♂♀♠♣♥❤☜,ResultSet应处理查询结果

5.      关闭资源☂ ☃ ☄ ★★☆♀◆◇。

d)     动态参数
sql语句中的数据★☆♀◆◇☂ ☃ ☄ ★♧♡♂♀♠♣♥❤☜,动态化☂ ☃ ☄ ★★☆♀◆◇。
String sql = insert into t_user (id,name,birthday) values (?,?,?);
pstmt = conn.prepareStatment(sql);
pstmt.setXXX();
pstmt.setString();
pstmt.setInt();
pstmt.setDouble();
pstmt.setDate();

pstmt.executeUpdate();

i.         日期类型的处理
java.util.Date:平时推荐使用的时期类型☂ ☃ ☄ ★★☆♀◆◇。不能应用在jdbc操作中☂ ☃ ☄ ★★☆♀◆◇。
java.sql.Date : 特点 代表时间只能用JDBC操作中

ii.       插入数据时 oracle的主键自动增长

1.      建立sequence序列

2.      String sql = “insert intot_user (id,name,birthday) values (user_seq.nextval,?,?)”

 

e)      修改与删除

f)       JDBC中的查询

i.         ResultSet对象的使用
代表的是★☆♀◆◇☂ ☃ ☄ ★♧♡♂♀♠♣♥❤☜,这次查询的结果☂ ☃ ☄ ★★☆♀◆◇。








g)      常见错误

i.         为什么程序没有显示错误
原因:catch块中没有e.printStackTrace();

ii.       java.lang.ClassNotFoundException产生原因
1 类名字书写错误
2 没有导入相关的jar包

iii.     java.sql.SQLException
与sql语句相关的错误
1 约束错误
2 表名列名书写错误
把sql运行在数据库中

iv.    Io 异常:The Network Adapter could not establish the connection
1 oracle服务的监听器问题
2 oracle:jdbc:thin:@ip 问题

 ==================================================

1.      JdbcUtil工具类的封装

a)      基础版本的JDBCUtil的封装

b)     提高版JDBCUtil 引入 配置文件☂ ☃ ☄ ★★☆♀◆◇。

开发步骤 (基础版JDBCUtil)

1.      准备小的配置文件
.properties结尾

2.      把代码中经常变化的字符串 删除

3.      通过输入流把配置文件的内容 读入到程序中

2.      DAO(DataAccess Object 数据访问对象)设计思想

a)      ORM(ObjectRelationship Mapping)编程思想

b)     DAO设计思想

c)      DAO的开发步骤

i.         建表

ii.       实体类(entity)

iii.     定义DAO接口

iv.    应用JDBC书写DAO接口的实现类


1.      Service(Biz  Business) 业务层处理
业务层★☆♀◆◇☂ ☃ ☄ ★♧♡♂♀♠♣♥❤☜,就代表的是用户完成的一个功能★☆♀◆◇☂ ☃ ☄ ★♧♡♂♀♠♣♥❤☜,操作☂ ☃ ☄ ★★☆♀◆◇。它是由DAO的调用(多次调用DAO的方法)组成☂ ☃ ☄ ★★☆♀◆◇。

a)      基本开发方式

i.         Service功能的抽取

ii.       Service开发的标准方式

iii.     Java系统的开发过程

1.      Table

2.      Entity

3.      DAO接口

4.      DAO的实现类

5.      Service接口

6.      Service接口的实现类

iv.    事务(Transaction TX)
一个业务方法中的一组DAO方法要不一起成功★☆♀◆◇☂ ☃ ☄ ★♧♡♂♀♠♣♥❤☜,要不一起失败

1.      事务的控制位置◀ ◁ ☀ ☁ ?
在Service中的业务方法内☂ ☃ ☄ ★★☆♀◆◇。

2.      事务控制的代码如何书写

a)      注意:JDBC会把一条增◀ ◁ ☀ ☁ 、删◀ ◁ ☀ ☁ 、改操作自动加入事务☂ ☃ ☄ ★★☆♀◆◇。【不好 没有必要 容易产生问题】

b)     手工控制事务【重点】
connection#.setAutoCommit(false); 手工开启事务
connection#commit(); 手工提交事务
connection#rollback();手工回滚事务

c)      控制事务代码的最佳实践

i.         问题 service控制事务 需要Connection
     DAO进行操作 也需要Connection
     所以要保证Service中Connection与DAO
     是一致的
解决访问1 把Connection作为DAO接口的参数

     2 线程绑定(TheadLocal)
       保证通过线程绑定的对象★☆♀◆◇☂ ☃ ☄ ★♧♡♂♀♠♣♥❤☜,一个线程中获得的是相同的
       对象★☆♀◆◇☂ ☃ ☄ ★♧♡♂♀♠♣♥❤☜,不同的线程中获得的是不同的对象
       



注意:引入了事务后★☆♀◆◇☂ ☃ ☄ ★♧♡♂♀♠♣♥❤☜,Connection关闭在Service层★☆♀◆◇☂ ☃ ☄ ★♧♡♂♀♠♣♥❤☜,而其他JDBC组件关闭在DAO层☂ ☃ ☄ ★★☆♀◆◇。


1.      MyElicpse工具连接数据库☂ ☃ ☄ ★★☆♀◆◇。

2.      分页查询

a)      分页的基本封装

b)     补充:为啥DAO接口要用List集合◀ ◁ ☀ ☁ ?

3.      事务TX封装

a)      Connection为什么不能作为成员变量呢◀ ◁ ☀ ☁ ?

4.      JDBC代码与工厂设计的模式结合

a)      工厂设计模式(GOF 4人帮 23种设计模式之一)
工厂类中的工厂方法负责对象的创建(生产)☂ ☃ ☄ ★★☆♀◆◇。
好处:解耦和

b)     工厂版本一

c)      通用的工厂

d)     通用工厂类的使用文档 API

i.         创建类

ii.       书写配置文件

iii.      创建工厂并调用getBean方法获得对象
ApplicationContext<OrderService> c = new ApplicationContext<OrderService>();
对象 = c.getBean(“key”);

5.      基于封装后的JDBC的开发步骤总结

6.      自定义Spring框架中的JdbcTemplate (23种设计 模板)
问题:DAO实现类中的代码冗余

来源:itnose

上一篇: 浅谈JDBC

下一篇: Mysql连接问题:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException

分享到: 更多