基础知识:JDBC
JDBC的工作原理
JDBC是一种执行SQL的Java API,可以为多种数据库提供统一访问
JDBC由两部分组成,一部分是供程序员调用的API,另一部分是需要数据库厂商实现的SPI,也就是驱动程序
JDBC采用驱动模式的设计(什么是驱动模式?)
JDBC操作数据库的编程步骤
1、注册驱动程序,也就是将驱动程序加载到Java虚拟机中,这里的驱动程序也就是数据库厂商提供的驱动程序,加载到Java虚拟机中之后,驱动管理器DriverManager才能够找到该驱动程序,一般通过Class.forName("驱动程序的完整类名")
2、获取数据库的连接,通过DriverManager的getConnection得到一个与数据库的连接对象,这个对象时一个Connection接口,该接口在java.sql包下,getConnection方法需要提供连接的URL,用户名,密码等参数
3、创建与数据库的会话,这个会话对象是通过连接对象Connection的createStatement方法得到的,会话对象是一个Statement,但常用的是PreparedStatement,这是一个预编译的会话,相当于告诉了数据库即将执行的SQL语句,如果SQL语句中包含了未知参数可以用占位符?进行替代,然后只需要传递参数即可,效率更高一些,另外使用占位符可以很好的避免SQL注入的攻击
4、在得到会话之后,就可以执行SQL语句了,执行SQL语句是利用会话的executeQuery和executeUpdate两个方法来完成的,前者返回一个查询集,后者返回一个影响的行数,查询的结果是一个查询集ResultSet
5、处理结果集,利用ResultSet的next方法遍历查询集
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>