JDBC 简述

前言

JDBC(Java Data Base Connectivity) 是一种用于执行SQL语句的Java API,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。

简单地说,JDBC可做三件事:与数据库建立连接、发送操作数据库的语句并处理结果。

基本的JDBC组件

  • 第一步, Java应用需要创建并建立与特定数据库的连接

    • 通过 Driven Manager (java.sql.DriveManager)

    • 或者通过连接 JDBC数据源 (javax.sq.DataSource)

  • 第二步, 对数据库进行增删改查操作

    • 用java.sql.Statement 和 java.sql.PreparedStatement 来执行SQL语句
  • 第三步, 接收查询操作返回的数据

    • 使用 java.sql.ResultSet

数据库连接

加载驱动

JDBC怎么用一套语法搞定一个数据库的? 其秘密就在于java的多态. 首先为JDBC注册一个数据库驱动, 然后根据这个驱动类型, 返回相应的连接.

首先加载相应的数据库驱动(以MySQL为例) :

1
2
3
4
5
6
try {
Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException e) {
System.out.println("找不到驱动程序");
}

假如想要操作的是Oracle或者HSQLDB呢?只需要把上面的com.mysql.jdbc.Driver改成org.hsqldb.jdbc.JDBCDriver 或者 org.hsqldb.jdbc.JDBCDriver

得到连接

加载了驱动之后,JDBC就知道你注册的数据库类型,这时候用java.sql.DriveManager即可得到JDBC到数据库的连接(java.sql.Connection)(可以理解为一个Socket)

1
2
3
4
5
6
7
8
9
try {
String url = "jdbc:mysql://127.0.0.1:3306/test?" + "user=root&password=root";
Connection con = DriverManager.getConnection(url);
}
catch(SQLException e) {
....
}

注:
上面代码的URL格式为(如果要使用英文以外的字符进行存储,要加上[]里的内容):

1
jdbc:mysql://主机名:端口/数据库名称?用户名="用户名"&密码="密码"[&useUnicode=布尔值&characterEncoding=编码方式]

例子(用中文存储):

1
jdbc:mysql://127.0.0.1:3306/test?user=root&password=root&useUnicode=true&characterEncoding=Big5

操作数据库

现在我们已经通过DriverManager得到一个connection了,现在可以用SQL进行操作了,这就要用到java.sql.Statement 和 java.sql.PreparedStatement

这里以java.sql.PreparedStatement为例 :

1
2
3
4
PreparedStatement countriesStatement = connection.prepareStatement("UPDATE
COUNTRIES SET NAME = ? WHERE ID = ?");
countriesStatement.setString(1, "Spain");
countriesStatement.setInt(2, 123456789);

仔细阅读代码会发现,这个类初始化的时候用到一个模板,后面就可以进行高效的批量操作了.

取得结果

如果进行查询操作的话,怎么接收返回的数据呢? 该 java.sql.ResultSet 粉墨登场了

1
ResultSet rs = countriesStatement.executeQuery("SELECT NAME, POPULATION FROM COUNTRIES");