博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JDBC4.2】一、JDBC简介
阅读量:4290 次
发布时间:2019-05-27

本文共 2071 字,大约阅读时间需要 6 分钟。

注意:本编文章以下代码均为简写方式,无法执行,仅供参考

1. JDBC的由来

直接使用socket协议访问数据库

应用程序可以直接通过多种方式访问数据库,最普通的是通过socket访问数据库。以Mysql 为例:首先通过程序通过socket和数据库建立了TCP连接,把准备执行的SQL语句或命令封装成特定于Mysql 数据库的应用层数据包,发送给Mysql 数据库,Mysql数据库执行命令,将结果封装成数据包并返回给应用,应用程序进行解析,显示结果给客户端。如下图所示:

这里写图片描述


访问数据库的抽象层–JDBC

令人抓狂的是,Oracle, DB2,Postgresql等其他数据库都有一套属于自己的应用层访问协议。 他们的网络访问协议和Mysql 的完全不一样 ! 这就意味着之前写的针对Mysql 的程序无法针对其他数据库通用, 如果想切换数据库, 每个程序都得另起炉灶写一套代码!直接使用socket访问数据库耦合度太高了,必须得有一个抽象层屏蔽这些细节!

为此,JDK专门提供了一系列针对这个抽象层的统一接口—JDBC(Java Data Base Connectivity,java数据库连接),称为JDBC规范。数据库厂商需要实现JDBC规范中的某些接口(实现中应包含特定数据库的应用层协议的转换/解析等),这些接口统被称为 XX数据库驱动 。如下图所示
这里写图片描述
数据库厂商实现这些接口一般以单个的jar文件发布,如:
mysql-connector-java-5.1.40.jar(Mysql)
ojdbc14.jar(Oracle)


2. JDBC的发展

参考我的另一篇文章


3.JDBC的一些接口

java.sql.Connection接口

JDBC规范中用Connection接口用来代表程序和数据库的Socket连接。数据库厂商必须实现这个接口。

使用java.sql.Driver

JDBC规范了一个抽象层吧: Driver接口。每个数据库都需要实现Driver 接口, 通过Driver 可以获得特定数据库的Connection 。 这样就避免了直接调用特定Connection的耦合性。

Driver driver=new com.abc.Driver();//获取DB连接Connection connection = driver.connect("url","user","pwd");

工厂类java.sql.DriverManager

如果要访问多个数据库—JDBC提供了DriverManager类,使用它可以注册不止一个Driver,方便获取对应数据库Connection。你可以这样写:

//注册一个数据库驱动/如果换用其他厂商的数据库驱动,直接在这里换其他DriverDriverManager.registerDriver(new com.abc.Driver());DriverManager.registerDriver(new com.ssss.Driver());//获取连接Connection connection = DriverManager.getConnection("url","user","pwd");

Driver会根据url来调用注册在DriverManager中的每个Driver相应方法,来判断是否支持这个url,如果是则返回特定的Connection。

进一步简化

在JDBC4.0以后,你可以这样写:

Connection connection = DriverManager.getConnection("url","user","pwd");

DriverManager会自动加载ClassPath中所有的Driver实现类,而每个Driver类被加载时,会自动注册到DriverManager中(在静态代码块static{}中实现注册)。

4. 开发环境

JDK版本

版本1.8

IDE

InteliJ IDEA 2016

maven依赖

mysql
mysql-connector-java
6.0.5

数据库信息

类型:mysql

版本: 5.7
IP: localhost
端口:3306
库名:test
用户名: root
密码: 123456
表: student
表结构:

CREATE TABLE `student` (  `name` varchar(5) NOT NULL,  `age` int(11) DEFAULT NULL,  PRIMARY KEY (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

5. 参考文献

1.JDBC™ 4.2 Specification : JSR 221(Lance Andersen, Specification Lead)March 2014

你可能感兴趣的文章
升级centos 6.8 服务器的gcc
查看>>
API网关在微服务架构中的应用,这一篇就够了
查看>>
JVM发生内存溢出的8种原因、及解决办法
查看>>
SpringBoot2.0 基础案例(12):基于转账案例,演示事务管理操作
查看>>
高性能负载均衡:nginx搭建tomcat集群
查看>>
Spring切面中的正则表达式
查看>>
一直再说高并发,多少QPS才算高并发?
查看>>
Git恢复之前版本的两种方法reset、revert(图文详解)
查看>>
Maven打包的三种方式
查看>>
电商场景:并发扣库存,怎么保证不超卖又不影响并发性能
查看>>
分布式事务处理方式总结
查看>>
延迟队列有哪些实现方案?说说你的看法
查看>>
厉害了!我们老大半小时把我的springboot项目并发提升几倍
查看>>
Spring 中Bean 的生命周期
查看>>
为什么要用枚举实现单例模式(避免反射、序列化问题)
查看>>
微服务架构下的分布式限流方案思考
查看>>
全网最详细的一篇SpringCloud总结
查看>>
消息中间件中的有序消息,其实是排队但是不能插队
查看>>
mysql为什么使用B+树作为索引的结构
查看>>
mysql索引总结(1)-mysql 索引类型以及创建(文章写的不错!!!)
查看>>