IGNORANT

JDBC入门实验2-JDBC基础

实验内容

本实验将学习 JDBC 驱动类型以及 JDBC 连接数据库的相关知识。

实验知识点

JDBC 结构

首先我们先来回顾一下上节实验课的内容。JDBC 全称为Java Database Connectivity,中文名称为 Java 数据库连接,它是一种用于执行 SQL 语句的 Java API,它由一组用 Java 编程语言编写的类和接口组成。JDBC 为数据库开发人员提供了一个标准的 API,使他们能够用纯 Java API 来编写数据库应用程序。

JDBC API 是 Java 开发工具包(JDK)的组成部份,由三部分组成:

  1. JDBC 驱动程序管理器是 JDBC 体系结构的支柱,其主要作 用是把 Java 应用程序连接到正确的 JDBC 驱动程序上。
  2. JDBC 驱动程序测试工具包为 JDBC 驱动程序的运行提供一定的可信度,只有通过 JDBC 驱动程序测试包的驱动程序才被认为是符合 JDBC 标准的。
  3. JDBC-ODBC 桥使 ODBC 驱动程序可被用作 JDBC 驱动程序。其目标是为方便实现访问某些不常见的 DBMS(数据库管理系统),它的实现为 JDBC 的快速发展提供了一条途径。

JDBC既支持数据库访问的两层模型,也支持三层模型。

1、数据库访问的两层模型


2、数据库访问的三层模型

JDBC 驱动类型

JDBC 驱动程序实现 JDBC API 中定义的接口,用于与数据库服务器进行交互。JDBC 驱动程序可以打开数据库连接,并通过发送 SQL 或数据库命令,然后在收到结果与 Java 进行交互。

JDBC 驱动程序的实现因为各种各样的操作系统和 Java 运行在不同的硬件平台上而不同。JDBC 驱动类型可以归结为以下几类:

MySQL 的 Connector/Java 的驱动程序是一个类型4驱动程序。因为他们的网络协议的专有性的,数据库厂商通常提供类型4的驱动程序。

通常情况下如果正在访问一个类型的数据库,如Oracle,Sybase或IBM,首选驱动程序是类型4。

如果Java应用程序同时访问多个数据库类型,类型3是首选的驱动程序。

第2类驱动程序是在类型3或类型4驱动程序还没有提供数据库的情况下显得非常有用。

类型1驱动程序不被认为是部署级别的驱动程序,它通常仅用于开发和测试目的。

实验环境

实验步骤

涉及到建立一个 JDBC 连接的编程主要有四个步骤:

接下来我们便详细讲解这四步。

导入 JDBC 驱动

我们已经在上一节课为同学们就相应的方法做了介绍,不清楚的同学可以查看上一节实验课的内容。

注册 JDBC 驱动程序

我们在使用驱动程序之前,必须注册你的驱动程序。注册驱动程序的本质就是将我们将要使用的数据库的驱动类文件动态的加载到内存中,然后才能进行数据库。比如我们使用的 Mysql 数据库。我们可以通过以下两种方式来注册我们的驱动程序。

方法1——Class.forName()

动态加载一个类最常用的方法是使用Java的Class.forName()方法,通过使用这个方法来将数据库的驱动类动态加载到内存中,然后我们就可以使用。

使用Class.forName()来注册 Mysql 驱动程序:

try {
   Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException ex) {
   System.out.println("Error: unable to load driver class!");
   System.exit(1);
}

方法2——DriverManager.registerDriver()

Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);

指定数据库连接URL

当加载了驱动程序,便可以使用 DriverManager.getConnection() 方法连接到数据库了。

这里给出 DriverManager.getConnection() 三个重载方法。

getConnection(String url)
getConnection(String url, Properties prop)
getConnection(String url, String user, String password)

数据库的URL是指向数据库地址。下表列出了下来流行的JDBC驱动程序名和数据库的URL。

RDBMSJDBC驱动程序的名称URL
Mysqlcom.mysql.jdbc.Driverjdbc:mysql://hostname/ databaseName
Oracleoracle.jdbc.driver.OracleDriverjdbc:oracle:thin:@hostname:port Number:databaseName
DB2COM.ibm.db2.jdbc.net.DB2Driverjdbc:db2:hostname:port Number/databaseName
Sybasecom.sybase.jdbc.SybDriverjdbc:sybase:Tds:hostname: port Number/databaseName

创建连接对象

下面三种形式DriverManager.getConnection()方法来创建一个连接对象,以 Mysql 为例。getConnection()最常用形式要求传递一个数据库URL,用户名 username和密码 password。

1、使用数据库URL的用户名和密码

String URL = "jdbc:mysql://localhost/EXAMPLE";
String USER = "username";
String PASS = "password"
Connection conn = DriverManager.getConnection(URL, USER, PASS);

2、只使用一个数据库URL

然而,在这种情况下,数据库的URL,包括用户名和密码。

String URL = "jdbc:mysql://localhost/EXAMPLE?user=root&password=0909";
//Mysql URL的参数设置详细可以查阅相关资料
Connection conn = DriverManager.getConnection(URL);

3、使用数据库的URL和一个Properties对象

import java.util.*;

String URL = "jdbc:mysql://localhost/EXAMPLE";
Properties pro = new Properties( );

//Properties对象,保存一组关键字-值对
pro.put( "user", "root" );
pro.put( "password", "" );

Connection conn = DriverManager.getConnection(URL, pro);

4、关闭JDBC 连接

conn.close();

实验代码

import java.sql.*;
//连接方法3需要添加
import java.util.*;

public class JdbcTest{
    //JDBC 驱动器名称 和数据库地址
    static final String JDBC_DRIVER="com.mysql.jdbc.Driver";
    //数据库的名称为 EXAMPLE
    static final String DB_URL="jdbc:mysql://localhost/EXAMPLE";

    //数据库用户和密码
    static final String USER="root";
    static final String PASS="";
    public static void main(String args[]){
        Connection conn=null;
        Statement stmt=null;
        try{
            //注册JDBC驱动程序
            //方法1
            //Class.forName(JDBC_DRIVER);
            //方法2
            Driver jdb_driver=new com.mysql.jdbc.Driver();
            DriverManager.registerDriver(jdb_driver);

            //打开链接
            System.out.println("Connection to database...");
            //方法1
            //conn=DriverManager.getConnection(DB_URL,USER,PASS);
            //方法2
            //String sqlurl="jdbc:mysql://localhost/EXAMPLE?user=root&password=";
            //conn=DriverManager.getConnection(sqlurl);
            //方法3
            Properties sqlpro=new Properties();
            //Properties对象,保存一组关键字-值对
            sqlpro.put("user","root");
            sqlpro.put("password","");
            conn=DriverManager.getConnection(DB_URL,sqlpro);

            //执行查询
            System.out.println("Creating statement...");
            stmt=conn.createStatement();
            String sql;
            sql="SELECT id,name,age FROM Students";
            ResultSet rs=stmt.executeQuery(sql);

            //得到和处理结果集
            while(rs.next()){
                //检索
                int id=rs.getInt("id");
                int age=rs.getInt("age");
                String name=rs.getString("name");

                //显示
                System.out.print("ID: "+id);
                System.out.print(", Age: "+age);
                System.out.print(", name: "+name);
                System.out.println();
            }
            //清理环境
            rs.close();
            stmt.close();
            conn.close();
        }catch(SQLException se){
            //JDBC 操作错误
            se.printStackTrace();
        }catch(Exception e){
            //Class.forName错误
            e.printStackTrace();
        }finally{
            //这里一般用来关闭资源
            try{
                if(stmt!=null)
                    stmt.close();
            }catch(SQLException se2){}
            try{
                if(conn!=null)
                    conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
        System.out.println("Goodbye!");
    }
}

实验结果

实验步骤的所有方法都经过测试,成功:

实验总结

感谢https://www.shiyanlou.com/courses/110

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »