一、JDBC简介
JDBC时Java DataBase Connectivity的缩写,它是连接Java程序和数据库服务器的纽带。JDBC的实现封装了与各种数据库服务器通信的细节。Java程序通过JDBC API来访问数据库,有以下优点:
(1)简化访问数据库的程序代码,无需涉及与数据库服务器通信的细节。
(2)不依赖于任何数据库平台,同一个Java程序可以访问多种数据库服务器。
如下图所示,JDBC的实现包括3部分。
(1)JDBC驱动管理器:java.sql.Drivermanger类,由SUN公司实现,负责注册特定JDBC驱动器,以及根据特地给驱动器建立与数据库的连接。
(2)JDBC驱动器API:由SUN公司制定,其中最主要的接口是java.sql.Driver接口。
(3)JDBC驱动器:由数据库供应商或者其他第三方工具提供商创建,也成为JDBC驱动程序。
JDBC驱动器可分为以下4类:
(1)第一类驱动器:JDBC-ODBC驱动器。ODBC(open database connectivity,开放数据库互连)是微软公司为应用程序提供的访问任何一种数据库的标准API。
(2)第二类驱动器:有部分Java代码和部分本地代码组成,用于与数据库的客户端API通信。
(3)第三类驱动器:完全由Java语言编写的类库。它用一种与具体数据库服务器无关的协议将请求发送给服务器的特定组件,再由该组件按照特定数据库协议对请求进行翻译,再把翻译后的内容发送给数据库服务器。
(4)第四类驱动器:完全由Java语言编写的类库。它直接按照特定数据库的协议,把请求发送给数据库服务器。
一般来说,这几类驱动器访问数据库的速度由快到低,依次为:第四类,第三类,第二类,第一类。Java应用程序应该优先考虑使用第三类和第四类驱动器。
二、java.sql包中的接口和类
(1)Driver接口和DriverManager类:前者表示驱动器,后者表示驱动器管理类
(2)Connection接口:表示数据库连接
(3)Statement接口:负责执行SQL语句
(4)PrepareStatement接口:负责执行预准备的SQL语句
(5)CallableStatement接口:负责执行SQL存储过程
(6)ResultSet接口:表示SQL查询语句返回的结果集
三、事务处理
在数据库操作中,一项事务是指由一条或者多条操纵数据库的SQL语句所组成的一个不可分割的工作单元。只有当事务中国的所有操作都正常完成,整个事务才能被提交到数据库;如果有一项操作没有完成,就必须撤销整个事务。
在Connection接口中提供了3个控制事务的方法。
(1) setAutoCommit(boolean autoCommit):设置是否自动提交事务
(2)commit():提交事务
(3)rollback():撤销事务
四、数据源(DataSource)简介
JDBC2.0提供了javax.sql.DataSource接口,它负责建立与数据库的连接,当在应用程序中访问数据库时不必编写连接数据库的代码,可以直接从数据源获得数据库连接。
1.数据源和数据库连接池
在数据源中事先建立了多个数据库连接,这些数据库连接保存在连接池(Connection Pool)中。当Java程序访问数据库时,只需从连接池中取出空闲状态的数据库连接,当程序访问数据库结束后,再将数据库连接放回连接池,这样做可以提高访问数据库的效率。
2.数据源和JNDI资源
DataSource对象通常是Servlet容器提供的,因此Java程序无需自己创建DataSource对象,而只要直接使用Servlet容器提供的DataSource对象即可。那么Java程序如何获得Servlet容器提供的DataSource对象的引用呢?这要依赖Java的JNDI(Java Naming and Directory Interface)技术。
可以简单地把JNDI理解为一种将对象和名字绑定的技术,对象工厂负责生产出对象,这些对象都和唯一的名字绑定。外部程序可以通过名字来获得某个对象的引用。
五、配置数据源
为Web应用配置数据源涉及修改context.xml和web.xml文件。在context.xml文件中加入定义数据源的<Resource>元素;在web.xml中加入<resource-ref>元素,该元素声明Web应用引用了特定数据源。
<Context reloadable = "true">
<Resource name = "jdbc/BookDB" auth = "Container" type = "javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="dbuser" password="1234"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/BookDB?autoReconnect=ture"/>
</Context>
<web-app>
<resource-ref>
<desciption>DB Connection</description>
<res-ref-name>jdbc/BookDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
来源:https://blog.csdn.net/wangzhiwencsdn/article/details/100532031