JavaWeb 第2章 任务2 2.1.1 JDBC 的基本使用

本文详细介绍了JDBC技术,一种Java数据库连接标准,包括其概念、作用、工作原理及如何使用JDBCAPI访问数据库。通过示例演示了加载驱动、获取连接、执行SQL语句、处理结果集及释放资源的全过程。

 

JavaWeb 应用设计及实战 目录

上一个任务/上一节       下一个任务/下一节

 

目录

2.1.1  JDBC 的基本使用

    1.JDBC 技术

   (1)JDBC 的概念

  (2)JDBC 的作用

    (3) JDBC 的工作原理

    2.使用JDBC 访问数据库

   (1)JDBC API 

     (2) JDBC 访问数据库的步骤

示例1

示例 2 

示例 3 

 示例 4

     注意


2.1.1  JDBC 的基本使用

    在之前的学习中,新闻标题等数据的存储和显示都是在 JSP 中直接通过变量来实现

的。但是当页面中需要显示大量的数据信息时,就不能再使用变量来实现了。使用数据

库来存储数据,通过访问数据库实现数据的读取和编辑,是进行项目开发必须要掌握的

一门技术。

    1.JDBC 技术

   (1)JDBC 的概念

      JDBC (Java DataBase Connectivity) 是一种 Java 数据库连接技术,能实现 Java 程

序对各种数据库的访问。由一组使用 Java 语言编写的类和接口组成,这些类和接口称为

JDBC API ,它们位于 java.sql 以及 javax.sql 包中。

  (2)JDBC 的作用

     在项目开发中,使用 JDBC 可以实现应用程序与数据库之间的新闻通信,简单来说,

JDBC 的作用有以下 3 点。

    1)建立与数据库之间的访问连接。

    2)将编写好的 SQL 语句发送到数据库执行。

    3)对数据库返回的结果进行处理。

    (3) JDBC 的工作原理

  JDBC 在执行时有一套固定的流程,图 2-1 所示为 JDBC 的工作原理。

     从 图 2.1 中可以看到一个 JDBC 程序有几个重要的组成要素。顶层是自己编写的 Java

应用程序,Java 应用程序可以使用 javax.sql 和 javax.sql 包中的 JDBC API 来连接和操作

数据库。了解 JDBC 的工作原理请扫描二维码。

    2.使用JDBC 访问数据库

   (1)JDBC API 

     使用JDBC 访问数据库,就必须要使用到 JDBC API 。JDBC API 可以完成 3 件事情:

与数据库建立连接、发送 SQL 语句和处理数据库返回的结果,如图 2.2 所示。

 

        图2.2  JDBC API

     图2.2 展示了在使用 JDBC API 时,JDBC API 工作的4个重要环节涉及的相关类和

接口。

    1)DriverManager 类:负责依据数据库的不同,管理 JDBC 驱动。

    2 ) Connection (连接) 接口:负责连接数据库并担任传送数据的任务。

    3) Statment 接口:由 Connection 产生,负责执行 SQL 语句。

    4)ResultSet 接口:负责保存 Statement 执行后所产生的执行结果。

     (2) JDBC 访问数据库的步骤

     实现数据库的访问,需要执行以下几个步骤。

    1) 使用 Class.forName() 方法加载 JDBC 驱动类。如果系统中不存在给定的类,则

会引发已异常,异常类型为 "ClassNotFoundException"。 加载驱动的语法如下:

Class.forName("JDBC 驱动类的名称");

    2)使用 DriverManager 类获取数据库的连连接。

     DriverManager 类跟踪已注册的驱动程序,当调用 getConnection() 方法时,它会搜

索整个驱动程序列表,知道找到一个能够连接至数据库连接字符串中指定的数据库的驱

动程序。加载此驱动程序之后,将使用 DreverManager 类的 getConnection() 方法建立与

数据库的连接。此方法接收 3 个参数,分别表示数据库 URL 、数据库用户名和密码。其中,

数据库用户名和密码是可选的。获取数据库连接的语法如下:

Connection connection =  DriverManager.getConnection(数据库 URL,数据库用户名,密码);

例 1 示

   使用 JDBC 访问新闻系统数据库,加载数据库驱动,获取数据库连接。

   关键代码:

   

public void getNewsList(){
    try {
        //(1) 使用 Class.forName() 加载驱动
        Class.forName("com.mysql.jdbc.Driver");
        //(2) 获取数据库连接
        Connection connection = DriverManager.getConnection("jdbc.mysql://localhost:3306/news"),"root","root");
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }
    }

       使用 JDBC 访问数据库的第一步就是要加载驱动,然后是获取数据库连接,这个过

程可能会产生异常,所以在代码中使用了 try-catch 语句对异常进行捕捉处理。

     3) 发送 SQL 语句,并得到结果集。一旦建立连接,就可以使用该连接创建 Statement

接口的实列,并将 SQL 语句传递给他所连接的数据库,若执行的是查询语句,会返回

类型为 ResultSet 的对象,它包含执行 SQL 查询语句的结果。

    创建 Statement 接口实列 的语句如下。

Statement stmt = connection.createStatement();

获取结果集对象的语句如下。

ResultSet rs = stmt.executeQuery("SELECT a,b,c FROM tabe 1");

示例 2 

在示例 1 的基础上,执行 SQL 语句并获得结果集。

   关键代码:

……
    //(1) 使用 Class.forName() 加载驱动
    Class.forName("com.mysql.jdbc.Driver");
    //(2) 获得数据库连接
    Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/news"),"root","root");
    //(3)获得 Statement 对象,执行 SQL 语句
    String sql = "select*from news_detail";
    Statement stmt = connection.createStatement();
    ResultSet rs = stmt.executeQuery(sql);

  4) 处理结果。

   执行 SQL 查询语句后,会返回一个结果集 ResultSet 对象。对结果集进行处理的步

骤概括如下。

  • 使用 ResultSet 对象的 next() 方法判断结果集是否包含数据。
  • 在 next() 方法返回 ture 的情况下调用 ResultSet 对象的 getXxx() 方法,得到记录
  •      中字段对应的值。

示例 3 

    在示例 2 的基础上 ,对结果集 进行处理。

   关键代码:

……
    //(4) 处理执行结果 (ResultSet)
    while(rs.next()){
        int id= rs.getInt("id");
        String title = rs.getString("title");
        String summary = rs.getString("summary");
        String content = rs.getString("content");
        String author = rs.getString("author");
        Timestamp time = rs.getTimestamp("createdate");
        System.out.println(id +"\t" +title = "\t"+summary +"'t"+
        content+"\t" +author +"\t" +time);
    }
……

   5)释放资源。在结束数据库访问后,应及时地释放资源。释放资源时需要注意如

下两个问题。

     1) 释放资源应按照创建顺序逐一释放,先创建的后释放,后吃创建的先释放。

     2)  由于资源释放不考虑程序本身运行是否正常,所以将释放资源至于 finally 语句

          块中,确保程序最终会执行资源释放的语句。

  示例 4

    结束数据库访问后,释放资源。

  关键代码:

……

    finally{
        //(5) 释放资源
        try{
            if(rs!=null){
                rs.close();       // 关闭结果集对象
            }
            if(stmt!=null){
                stmt.close();      //关闭 Statement 对象
            }
            if(connection!=null){
                connection.close();        //关闭连接对象
            }
        }catch (SQLException  e){
            e.printStackTrace();
        }
    }
    ……

     注意

         如果对一个已经关闭的或者没有实列化的 Connection 对象进行关闭,系统会

  抛出异常。所以在关闭时,一个良好的习惯是,首先对关闭对象进行判断,判断

  其是否为 NULL ,然后再确定是否关闭。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值