Java数据库访问技术:JDBC

JDBC(Java Database Connectivity)

Java连接数据库可以使用ODBC(Open Database Connectivity),由微软提供的一种数据库访问技术,也可以使用厂商驱动JDBC。本篇文章介绍使用厂商驱动的方式连接数据库,稍后还会介绍数据库连接池的使用:

 

针对不同的数据库,JDBC提出了驱动程序的概念,由JDBC提供一个接口,各个数据库厂商在提供可以连接该接口的数据库驱动程序。

 

a)   JDBC连接数据库的一般步骤(以MySQL为例):

  1、 导入厂商驱动的jar文件

  2、 使用Class.forName(“com.mysql.jdbc.Driver”);加载厂商驱动。(com.mysql.jdbc.Driver为MySQL的厂商驱动的名字)

  3、 使用DriverManager类的静态方法getConnection(url,username,password);(MySQL的url是jdbc:mysql://localhost:3306/dbname,其中dbname为数据库的名字,3306为mysql数据库的服务端口默认为3306,如果是3306也可省略不写)

  4、 使用获取的Connection对象创建Statement PreparedStatement CallableStatement对象来执行sql语句。

b)   JDBC的常用API:(JDBC的常用的API在Java.sql.*下)

  1、 Connection对象:代表数据库连接的对象,通过该对象可以创建Statement、PreparedStatement和CallableStatement对象对数据库进行CRUD(create,retrieve,update,delete)操作(增删改查操作)。Connection对象用来开启事务。

  2、 Statement对象:主要用来执行不带参数的sql语句。(不常用)

  3、 PreparedStatement对象:可以执行带参数和不带参数的sql语句。(常用)

  4、 CallableStatement对象:主要用来执行存储过程。目前一般不使用。

  5、 需要注意的是执行增删改语句时使用的方法与执行查询操作时使用的方法是不同的。执行增删改操作时使用executeUpdate()方法,返回值是整型,代表对数据库操作时影响了几行;执行查询操作时使用executeQuery()方法,返回值是ResultSet类型,其中存放着从数据库中查询出来的数据。

  6、 JDBC的事务:数据库中的事务管理是为了保证数据的完整性约束;在数据库中事务具有(ACID,Atomicity(原子性),Consistency(一致性),Isolation(隔离性),Durability(持久性));

  使用Connection对象开启事务。

  具体操作请参照实例程序

c)   使用连接池访问数据库:(注意,配置数据库连接池时,使用javaEE的JNDI(Java Naming Directory Interface,java命名与目录接口)技术)

以Tomcat7为例:

首先将数据库驱动导入到Tomcat的lib目录下,

  1. 在Tomcat的配置文件context.xml中添加信息:
<Context>
   <Resource
Name=”jdbc/DBSource”
Type=”javax.sql.DataSource”
driverClassName=”com.mysql.jdbc.Driver”
         url=”jdbc:mysql://localhost:3306/comDB”
       username=”root”
       password=”root”
       maxActive=”50”
       maxIdle=”20”
maxWait=”10000”/>
</Context>
  1. 在web项目下的WEB-INF文件夹下的web.xml中配置以下代码:
<resource-ref>
   <description>DBConnection</description>
   <res-ref-name>jdbc/DBSource</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
</resource-ref>
  1. 在程序中获取数据库连接:
Context jndiInit = new InitialContext();
DataSource db = (DataSource)jndiInit.lookup(“java:comp/env/jdbc/DBSource”);
Connection conn = db.getConnection();

具体参照数据库连接池的配置文件!