JDBC详细介绍+实例

本文详细介绍了如何使用JDBC连接MySQL,从JDBC的概念、类结构到操作步骤,包括DriverManager、Driver、Connection、Statement和ResultSet等接口的用法,并提供了一个完整的JDBC实例,演示了从加载驱动到执行SQL再到关闭资源的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  本文使用JDBC连接MySQL,提供一个完整的使用JDBC的使用实例,方便以后复习或者拷贝。

1.介绍

1)JDBC是Java语言访问数据库的一种规范,是一套API,即Java数据库编程接口。其采用接口和实现分离的设计思想,它的接口包含在java.sql和javax.sql包中,其中java.sql属于JavaSE,javax.sql属于JavaEE。这些接口的实现类叫做数据库驱动程序,由数据库的厂商或其它的厂商或者个人提供。
  
2)为了使客户端独立于特定的数据库驱动程序(独立于厂商),JDBC规范建议开发者使用基于接口的编程方式,即尽量使用仅依赖java.sql和javax.sql的接口和类(java的多态使得客户端不用依赖具体厂商开发的驱动程序,实现客户端的通用性)。
  
3)JDBC工作示意图
  JDBC工作示意图
  
4)JDBC类结构:DriverManager、Driver、Connection、Statement、ResultSet

  • DriverManager:是一个实现类,属于工厂类,用来产生Driver对象。
  • Driver:是驱动程序对象的接口,指向一个实实在在的数据库驱动程序对象,通过DriverManager的getDriver(String URL)方法获得。
  • Connection:这个接口指向一个数据库连接对象,通过DriverManager的getConnection(String URL)方法获得。
  • Statement:是用于执行静态的SQL语句的接口,通过Connection的createStatement()方法获得。
  • ResultSet:用于指向结果集对象的接口,通过Statement的execute等方法获得。

5)通过JDBC访问数据库的一般步骤:

  • 得到数据库的驱动程序
  • 创建数据库连接
  • 执行SQL语句
  • 得到结果集
  • 对结果集做相应的处理(增删查改)
  • 关闭资源

相应的时序图如下所示:
JDBC连接操作时序图

2.编码

1)准备:

  • 驱动程序包名:mysql-connector-java-5.0.4-bin.jar
  • 驱动类名称:com.mysql.jdbc.Driver
  • 数据库URL:jdbc:mysql://10.1.40.61:3306/dbname?user=root&password=root

2)编写JdbcTest.java

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

public class JdbcTest {

    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        String sql;
        /*
         * MySQL的JDBC URL编写方式:jdbc:mysql://主机名称:连接端口/数据库的名称?参数=值
         * 为了避免中文乱码要指定Unicode和characterEncoding
         * 执行数据库操作之前要在数据库管理系统上创建一个数据库,名字自己定
         */
        String url = "jdbc:mysql://10.1.40.61:3306/test_bid_system?"
                +"user=root&password=root&Unicode=true&characterEncoding=UTF8";
        try {
            //之所以要使用下面这条语句,是因为要使用MySQL的驱动,所以我们要把它驱动起来
            //动态加载mysql驱动
            Class.forName("com.mysql.jdbc.Driver");
            //一个Connection代表一个数据库连接
            conn = DriverManager.getConnection(url);
            //Statement带有很多方法,比如executeUpdate方法可以实现插入,更新和删除等操作
            stmt = conn.createStatement();
            sql = "insert into bms_weekreport(userId,submitTime,lastWeek,thisWeek) values(10041,'2014-12-30','123','321')";
            // executeUpdate语句会返回一个受影响的行数,如果返回-1就没有成功
            int result = stmt.executeUpdate(sql);
            System.out.println("result is:"+result);
            sql = "select * from bms_weekreport";
            // executeQuery会返回结果的集合,否则返回空
            rs = stmt.executeQuery(sql);
            //对结果集进行操作
            while(rs.next()) {
                System.out.println(rs.getInt(1)+","+rs.getString(2));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭ResultSet资源
            try {
                rs.close();
            } catch (Exception e2) {
                e2.printStackTrace();
            }
            //关闭Statement资源
            try {
                stmt.close();
            } catch (Exception e3) {
                e3.printStackTrace();
            }
            //关闭Connection资源
            try {
                conn.close();
            } catch (Exception e4) {
                e4.printStackTrace();
            }
        }
    }

}

注意:在最后关闭资源的时候,不能够写成如下的形式。

finally{
    try{
        //关闭ResultSet资源
        rs.close();
        //关闭Statement资源
        stmt.close();
        //关闭Connection资源
        conn.close();
    }catch(SQLException e){
        e.printStackTrace();
    }
}

原因是,如果在conn.close()执行之前,rs.close()或者stmt.close()出现SQLException异常,那么它就得不到执行,因此资源不会被关闭,造成连接泄露。

3.运行结果

1)JdbcTest.java运行结果:
JdbcTest.java运行结果
2)项目的包结构:
包结构

4.参考资料

资料一
资料二

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值