基础知识:JDBC

JDBC的工作原理

   

JDBC是一种执行SQLJava API,可以为多种数据库提供统一访问

   

JDBC由两部分组成,一部分是供程序员调用的API,另一部分是需要数据库厂商实现的SPI,也就是驱动程序

   

JDBC采用驱动模式的设计(什么是驱动模式?)

   

JDBC操作数据库的编程步骤

   

1、注册驱动程序,也就是将驱动程序加载到Java虚拟机中,这里的驱动程序也就是数据库厂商提供的驱动程序,加载到Java虚拟机中之后,驱动管理器DriverManager才能够找到该驱动程序,一般通过Class.forName("驱动程序的完整类名")

2、获取数据库的连接,通过DriverManagergetConnection得到一个与数据库的连接对象,这个对象时一个Connection接口,该接口在java.sql包下,getConnection方法需要提供连接的URL,用户名,密码等参数

3、创建与数据库的会话,这个会话对象是通过连接对象ConnectioncreateStatement方法得到的,会话对象是一个Statement,但常用的是PreparedStatement,这是一个预编译的会话,相当于告诉了数据库即将执行的SQL语句,如果SQL语句中包含了未知参数可以用占位符?进行替代,然后只需要传递参数即可,效率更高一些,另外使用占位符可以很好的避免SQL注入的攻击

4、在得到会话之后,就可以执行SQL语句了,执行SQL语句是利用会话的executeQueryexecuteUpdate两个方法来完成的,前者返回一个查询集,后者返回一个影响的行数,查询的结果是一个查询集ResultSet

5、处理结果集,利用ResultSetnext方法遍历查询集

6、关闭连接

   

   

指定结果集ResultSet可滚动

   

在创建Statement或者PreparedStatement时传入type参数

   

Statement stmt=conn.creatStatement(sql,type,concurrency);

PreparedStatement pstmt=conn.PreparedStatement(sql,type,concurrency);

   

type的三种参数类型

   

TYPE_FORWARD_ONLY:不可滚动

TYPE_SCROLL_INSENSITIVE:数据库查询引起的变化对结果集不影响

TYPE_SCROLL_SENSITIVE:数据库的变化也会影响结果集

   

concurrency用于指定是否为可更新的结果集,意思就是说在查询出来的结果集中修改数据会同步到数据库

   

concurrency的三种参数类型

   

CONCUR_READ_ONLY:结果集不能用于更新数据库

CONCUR_UPDATABLE:结果集可以用于更新数据库

   

JDBC操作事务

   

JDBC的事务要满足四个特性,也就是经常说的ACID

   

所谓的A,是指atomicity,即原子性,它要求事务中逻辑单元对数据的操作要么全部执行,要么全部不执行

所谓的C,是指consistency,即一致性,它要求事务完成时,所有的数据都必须保持一致状态

所谓的I,是指isolation,即隔离性,它要求并发事务之间对数据的修改不能同时进行,比如AB同时给C转账,那么AB的转账操作不能同时对C的余额进行修改,也就是说要么A先对C的余额进行操作了之后B才对C的余额进行操作

所谓的D,是指durability,即持久性,它要求事务完成之后,对系统的影响是永久性的

   

事务的结束只能有两种方式:提交和回滚

   

默认情况下,JDBC使用自动提交事务的方式,但是多数情况下需要控制事务的过程,如果发生异常,希望能够回滚事务,那么我们就需要关闭自动提交事务,然后自己控制事务的提交,在没有异常的时候提交,而出现异常,在异常的catch中回滚

   

try{

conn.setAutoCommit(false);

stmt=conn.creatStatement();

stmt.executeUpdate("sql命令");

conn.commit();

}catch(Exception e){

e.printStackTrace();

conn.rollback();

}

   

使用连接池技术

   

JDBC提供的连接方式不同,数据库连接池的方式获取连接需要使用数据源的形式来获取连接,而传统的JDBC是通过驱动管理器来获取

   

主要代码如下:

InitialContext cxt=new InitialContext();

DataSource ds=(DataSource)cxt.lookup("数据源在JNDI上的路径");

Connection conn=ds.getConnection();

   

连接池的技术解决了重复创建连接,基本上池的技术都是为了解决重复创建连接

   

JDBC获得Oracle数据库连接

   

通过JDBC获得Oracle数据库连接有三种方式,一种是OCI,一种是Thin,另一种是ODBC的方式,下面对这三种方式进行一下说明

   

OCI方式依赖本地的动态链接库,如果在本地安装了Oracle数据库客户端,可以采用这种方式

Thin方式为纯Java的数据库连接方式

ODBC不太常用

   

Thin方式连接Oracle数据库

   

jdbc:oracle:thin:@<server>[:<1521>]:<database_name>

posted @ 2015-05-13 21:38  keedor  阅读(260)  评论(0编辑  收藏  举报