JDBC 教程纵览


什么是JDBC

JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据。JDBC代表Java数据库连接。

JDBC库中所包含的API通常与数据库使用于:

  • 连接到数据库
  • 创建SQL或MySQL语句
  • 在数据库中执行SQL或MySQL查询
  • 查看和修改数据库中的数据记录

使用JDBC前提条件

在学习JDBC之前,需要对以下两个编程知识有一定的了解:

  • JAVA基础编程
  • SQL语句或一种数据库系统(如:MySQL,Oracle数据库)

JDBC环境设置

请确认您已完成以下设置:

  • JAVA(JDK)安装
  • 数据库系统的安装(如:MySQL的安装)

除上述者外环境配置外,还需要建立一个数据库,为本程项目作为测试使用。假设创建一个数据库:test,在这个数据库上创建一张表:sites。

在创建程序之前,我们需要在MySQL数据库中创建一个数据test_jdbc_db

create database test_jdbc_db;

并且创建一张表Sites:

create table Sites(
           id INT NOT NULL AUTO_INCREMENT,
           name VARCHAR(100) NOT NULL,
           url VARCHAR(40) NOT NULL,
           PRIMARY KEY ( id )
        );

插入如下数据:

insert into sites(name,url) values('编程字典','http://www.CodingDict.com');
insert into sites(name,url) values('百度','http://www.baidu.com');
insert into sites(name,url) values('谷歌','http://www.google.com');

创建JDBC应用程序

建立一个JDBC应用程序,本教程中以Java连接MySQL为一个示例,分六个步骤进行:

1. 导入包

在程序中包含数据库编程所需的JDBC类。大多数情况下,使用 import java.sql.* 就足够了,如下所示:

// 第一步:导入需要的包
import java.sql.*;

2. 注册JDBC驱动程序

需要初始化驱动程序,这样就可以打开与数据库的通信。以下是代码片段实现这一目标:

//第二步:注册JDBC驱动
Class.forName("com.mysql.jdbc.Driver");

3. 打开一个连接

使用DriverManager.getConnection()方法来创建一个Connection对象,它代表一个数据库的物理连接,如下所示:

// 第三步:打开一个连接
static final String USER = "root";
static final String PASS = "123456";
static final String DB_URL = "jdbc:mysql://localhost:3308/test_jdbc_db";

System.out.println("连接到数据库...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);

4. 执行一个查询

需要使用一个类型为StatementPreparedStatement的对象,并提交一个SQL语句到数据库执行查询。如下:

//第四步:执行一个查询
System.out.println("创建语句...");
stmt = conn.createStatement();
String sql;
sql = "SELECT id, name, url FROM Sites";
ResultSet rs = stmt.executeQuery(sql);

如果要执行一个SQL语句:UPDATEINSERTDELETE语句,那么需要下面的代码片段:

//第四步:执行一个查询
System.out.println("创建语句...");
stmt = conn.createStatement();
String sql;
sql = "DELETE FROM Sites";
ResultSet rs = stmt.executeUpdate(sql);

5. 从结果集中提取数据

这一步中演示如何从数据库中获取查询结果的数据。可以使用适当的ResultSet.getXXX()方法来检索的数据结果如下:

//第五步:从结果集中提取数据
while(rs.next()){
    //根据列名称检索数据
    int id  = rs.getInt("id");
    String name = rs.getString("name");
    String url = rs.getString("url");

    //显示
    System.out.print("ID: " + id);
    System.out.print(", Name: " + name);
    System.out.println(", url: " + url);
}

6. 清理环境资源

在使用JDBC与数据交互操作数据库中的数据后,应该明确地关闭所有的数据库资源以减少资源的浪费,对依赖于JVM的垃圾收集如下:

//第六步:清理环境资源
rs.close();
stmt.close();
conn.close();

第一个JDBC 程序实例

基于上面的步骤,我们可以综合示例代码,您可以使用以下代码作为模板来编写JDBC代码。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Demo01 {
       static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
       // 注意:默认端口号3306可以不写
       static final String DB_URL = "jdbc:mysql://localhost:3308/test_jdbc_db";

       static final String USER = "root";
       static final String PASS = "123456";

       public static void main(String[] args) {
       Connection conn = null;
       Statement stmt = null;
       try{

          Class.forName("com.mysql.jdbc.Driver");
          conn = DriverManager.getConnection(DB_URL,USER,PASS);
          stmt = conn.createStatement();
          String sql;
          sql = "SELECT id, name, url FROM Sites";
          ResultSet rs = stmt.executeQuery(sql);

          while(rs.next()){
             int id  = rs.getInt("id");
             String name = rs.getString("name");
             String url = rs.getString("url");

             System.out.print("ID: " + id);
             System.out.print(", Name: " + name);
             System.out.print(", url: " + url);
             System.out.println();

          }
          rs.close();
          stmt.close();
          conn.close();
       }catch(SQLException se){
          se.printStackTrace();
       }catch(Exception e){
          e.printStackTrace();
       }finally{
          try{
             if(stmt!=null)
                stmt.close();
          }catch(SQLException se2){
          }
          try{
             if(conn!=null)
                conn.close();
          }catch(SQLException se){
             se.printStackTrace();
          }
       }
    }
}

程序运行结果如下所示:

ID: 1, Name: 编程字典, url: http://www.CodingDict.com
ID: 2, Name: 百度, url: http://www.baidu.com
ID: 3, Name: 谷歌, url: http://www.google.com