千家信息网

JDBC技术

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,一、JDBC简介JDBC,Java Ddatabase Connection,Java数据库连接。Sun公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC。什么是驱动
千家信息网最后更新 2026年11月01日JDBC技术

一、JDBC简介

JDBC,Java Ddatabase Connection,Java数据库连接。

Sun公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC。


什么是驱动?两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信。


如果没有JDBC,Java程序员需要面向各个数据库驱动接口编程,开发复杂;sun公司提供一套统一JDBC接口规范,Java程序只需要使用JDBC就可以操作任何数据库,JDBC实现类由各个数据库厂商提供。


1.组成JDBC的2个包:java.sql和javax.sql。

DriverManger驱动管理类、Connection连接接口、Statement(PreparedStatement、CallableStatement)数据库操作、ResultSet结果集。

2.开发jdbc应用需要以上2个包外,还需要导入相应JDBC的数据库实现。


二、JDBC快速入门

创建一个user表

create table user(    id int primary key auto_increment,    username varchar(20) unique not null,    password varchar(20)  not null,    email varchar(40) not null);
package cn.test;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import com.mysql.jdbc.Driver;public class Test1 {        public static void main(String[] args) throws Exception {                //加载数据库驱动                DriverManager.registerDriver(new Driver());                //获取连接                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root");                //创建用于向数据库发送SQL的Statement对象,并发送SQL                Statement stat = conn.createStatement();                //从结果集中取出数据                String sql = " select * from user ";                ResultSet rs = stat.executeQuery(sql);                while(rs.next()){                        System.out.println(rs.getInt(1)+","+rs.getString(2)+","+rs.getString(3)+","+rs.getString(4));                }                //断开数据库的连接,并释放相关资源                rs.close();                conn.close();                        }}


三、JDBC编程步骤


四、JDBC访问数据库的流程

五、JDBC API详解


5.1DriverManager类

jdbc程序中的DriverManager用于加载驱动,并创建和数据库的连接,这个API的常用方法:

DriverManager.registerDriver(new Driver);DriverManager.getConnection(url,username,password);

注意,在实际开发中并不推荐采用registerDriver方法注册驱动,原因有二:

1)查看Driver的源代码可以看出,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象。

package com.mysql.jdbc;import java.sql.DriverManager;import java.sql.SQLException;public class Driver extends NonRegisteringDriver implements java.sql.Driver {        static {                try {                        DriverManager.registerDriver(new Driver());                } catch (SQLException E) {                        throw new RuntimeException("Can't register driver!");                }        }}

2)程序依赖MySQL的API,脱离MySQL的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。


推荐方式:class.forName("com.mysql.jdbc.Driver");

采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使得程序的灵活性更高。


同样,在开发中也不建议采用具体的驱动类型指向getConnection方法返回的Connection对象。


5.2数据库URL

URL用于标识数据库的位置,程序员通过URL地址告诉JDBC程序连接那个数据库,URL的写法为:

常用数据库URL的地址的写法:

oracle  jdbc:oracle:thin:@localhost:1521:sidmysql    jdbc:mysql://localhost:3306/sid

常用属性:useUnicode=true&characterEncoding=UTF-8


5.3Connection连接接口

应用一:获取SQL的操作对象

Statement stat = conn.createSteatement() 该对象可以将SQL发送给数据库进行执行
PreparedStatement pstmt = conn.prepareStatement(String sql) 对SQL语句进行预编译,防止SQL注入
CallableStatement cstmt = conn.prepareCall(String sql) 该对象可以调用数据库中存储过程


应用二:对数据库事务进行管理

conn.setAutoCommit(boolean flag) 设置事务是否自动提交
conn.commit()    提交数据库事务
conn.rollback()    回滚数据库事务


5.4Statement 用于将SQL发送给数据库,获取操作结果

jdbc程序中的Statement对象用于向数据库发送SQL语句,Statement对象常用方法::

executeQuery(String sql) 用于向数据发送查询语句
executeUpdate(String sql) 用于向数据库发送insert、update或delete语句
execute(String sql) 用于向数据库发送任意SQL语句
addBatch(String sql) 把多条SQL语句放到一个批处理中
executeBatch() 向数据库发送批处理执行


5.5ResultSet

jdbc程序中采用的ResultSet用于代表SQL语句的执行结果。ResultSet封装执行结果的时候,采用类似于表格的方式。ResultSet对象维护了一个指向表格数据行的游标,初始化的时候,游标在第一行之前,调用next()方法,可以使得游标指向具体的数据行,进而调用方法获取该行数据。

resultSet既然用于封装执行结果,所以该对象提供的大部分方法都是用获取数据的get方法:

获取任意类型的数据

getObject(int index) getObject(String columnName)

获取指定类型的数据

getString(int index)getString(String columnName)


5.6释放资源

jdbc程序运行完毕后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet、Statement和Connection对象。

特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。

为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。


六、JDBC完成CRUD示例

增加:

private static void create() throws Exception {                //加载数据库驱动                Class.forName("com.mysql.jdbc.Driver");                //获取连接                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root");                //创建用于向数据库发送SQL的Statement对象,并发送SQL                Statement stat = conn.createStatement();                String sql = " insert into user (username,password,email) values('哈哈','haha','hah@163.com') ";                int rows = stat.executeUpdate(sql);                if(rows > 0){                        System.out.println("执行增加完毕");                }                                //断开数据库的连接,并释放相关资源                conn.close();        }

删除

private static void delete() throws Exception {                //加载数据库驱动                Class.forName("com.mysql.jdbc.Driver");                //获取连接                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root");                //创建用于向数据库发送SQL的Statement对象,并发送SQL                Statement stat = conn.createStatement();                String sql = " delete from user where username = '哈哈'; ";                int rows = stat.executeUpdate(sql);                if(rows > 0){                        System.out.println("执行删除完毕");                }                                //断开数据库的连接,并释放相关资源                conn.close();        }

修改

private static void update() throws Exception {                //加载数据库驱动                Class.forName("com.mysql.jdbc.Driver");                //获取连接                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root");                //创建用于向数据库发送SQL的Statement对象,并发送SQL                Statement stat = conn.createStatement();                String sql = " update user set email = '123@163.com' where id = 1 ";                int rows = stat.executeUpdate(sql);                if(rows > 0){                        System.out.println("执行修改完毕");                }                                //断开数据库的连接,并释放相关资源                conn.close();                        }

查询

//加载数据库驱动                Class.forName("com.mysql.jdbc.Driver");                //获取连接                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root");                //创建用于向数据库发送SQL的Statement对象,并发送SQL                Statement stat = conn.createStatement();                //从结果集中取出数据                String sql = " select * from user ";                ResultSet rs = stat.executeQuery(sql);                while(rs.next()){                        System.out.println(rs.getInt(1)+","+rs.getString(2)+","+rs.getString(3)+","+rs.getString(4));                }                //断开数据库的连接,并释放相关资源                rs.close();                conn.close();


七、DAO模式

DAO模式(Data Access Object 数据库访问对象),在持久成通过DAO将数据源操作完全封装起来,业务层通过Java对象,完成对数据源操作。

数据 数据库 对象 程序 驱动 资源 方法 语句 结果 方式 设备 事务 常用 接口 开发 指向 游标 类型 封装 应用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单互联网科技有限公司 上海致骋互联网科技 猫创互联网科技 美国互联网前沿科技 天速互联网络科技有限公司 中国互联网有什么科技含量 互联网科技教育视频 互联网时代科技改变生活 阿大互联网科技有限公司 互联网科技人工智能实验室 广州新华互联网科技学校电竞方面 洛阳共同富裕互联网科技有限公司 深圳艾果互联网通讯科技 四川慕妮娅互联网科技有限公司 互联网数据科技专业 恒生互联网科技业指数调整周期 广西科技产业互联网是什么 广州三三互联网科技有限公司 亚光科技低轨卫星互联网 科技互联网专业务虚会材料 博彦科技互联网金融 互联网科技公司的优势 互联网科技有限公司经营范围 互联网科技会 嘟嘟瓜互联网科技 互联网时代科技改变生活 花神(南京)互联网科技有限公司 坤平互联网科技 21世纪互联网科技成就 网互联网络科技
0