JDBC全文详解

444 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、JDBC是什么

Java DataBase Connectivity(Java语言连接数据库)

二、JDBC的本质是什么

JDBC是SUN公司制定的一套接口(interface)

接口都有调用者和使用者

面向接口调用、面向接口写实现类,这都属于面向接口编程

三、为什么要面向接口编程

解耦合:降低程序的耦合度,提高程序的扩展力

多态机制就是非常典型的:面向抽象编程。(不要面向具体编程)

建议:Animal a=new Cat();public void feed(Animal a){//面向父类型编程}。

不建议:Dog d=new Dog();

四、思考:为什么SUN制定一套JDBC接口呢?

因为每个数据库的底层实现原理不同

例如Oracle、Mysql和MS sql server实现原理就不同

原理解释

五、异常的抛出和处理

举例: 输出:

六、JDBC开发前的准备工作

先从官网下载对应的驱动jar包,然后将其配置到环境变量classpath中。

下载mysql-installer-community-5.7.17.0.msi安装包,安装好之后再次点击该安装程序可选择Connector.J进行安装。(.msi安装包官网下载地址dev.mysql.com/downloads/f…

 eclipse配置jdbc

   第一步:在项目中创建Lib文件夹,将mysql的jar包粘贴进入![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fb6dc0ac94134888a97fa02f79113321~tplv-k3u1fbpfcp-zoom-1.image)

   第二步:鼠标右键点击mysql-connector-java-5.1.40-bin.jar,选择Build Path中的Add to Build Path则得到如下结果,多了一个引用的库即导入成功![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/285aca09e16d48b1964f0785ee29cb0d~tplv-k3u1fbpfcp-zoom-1.image)

七、JDBC编程六步

第一步:注册驱动(作用:告诉java程序,即将要连接哪个品牌的数据库)

第二步:获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程间通信,重量级的,使用之后一定要关闭)

第三步:获取数据库操作对象(专门执行sql语句的对象)

第四步:执行sql语句(DQL DML……)

第五步:处理查询结果集(只有当第四步执行的是select语句的时候,才有第五步处理结果集)

第六步:释放资源(使用完资源之后一定要关闭资源。Java和数据库属于进程间通信,开启之后一定要关闭)

八、举例

查询出目标库中所有的数据(selectAll)

完善之前代码展示

完善之后的代码展示

输出结果

注意:

对rs.next()进行说明

九、进行登录校验(SQL注入)(selectByUsernamePassword、selectByUP2)

方式一(存在sql注入)

sql注入(第二句的sql语句:select * from user where username='张三1'and password='11' or '1'='1')

方式二(改进不存在SQL注入)

十、分页查询(selectUserByPage)

limit 位置偏移量,行数:位置偏移量代表从哪一行开始,行数是指查询几行

代码展示

运行结果

十一、简化方法,创建JDBCUtils工具类(getConnection)

简化查询所有(selectAll方法)

JDBCUtils工具类(其中的方法采用static修饰,便于直接通过类名调用)

十二、增删改查操作

1、插入数据(insert)

main方法调用

insert方法代码

结果输出

2、删除数据(delete)

main函数调用

delete方法代码

结果输出

3、更新数据(update)

update方法代码

十三、事务(setAutoCommit、commit)

举例:一个银行有两个账户a和b,a向b转账1000

问题:当a向b转钱过程中,a-1000之后出现故障,b无法+1000

解决方法:将a和b放入一个事务中,a和b执行都执行成功才会成功

未使用事务,创建transferAccounts()方法

使用事务处理,修改之后的transferAccounts()方法

因为同事含有两个Statement需要关闭,重写JDBCUtils关闭方法

十四、连接池

1、自创连接池

代码展示(在JDBCUtils类中创建)

将关闭con连接,改成归还连接

使用已经创建好了的第三方连接池(数据源),如:dbcp、c3p0(常用)

2、使用dbcp

第一步:下载dbcp:commons.apache.org/proper/comm…

第二步:找到文件夹中的commons-dbcp2-2.7.0.jar,粘贴进入eclipse项目的Lib中,再右键点击找到Build Path选择Add to Build Path即可完成jar包导入

第三步:下载commons pool依赖包:commons.apache.org/proper/comm…,继续类似第二步操作

第四步:下载commons logging依赖包:commons.apache.org/proper/comm…,继续类似第二步操作

创建连接池类DBCPDataSource

在方法中直接调用即可

3、使用c3p0

第一步:进入sourceforge.net/projects/c3…,下载c3p0

第二步:在文件夹的lib内找到c3p0-0.9.5.5.jar添加进eclipse即可

第三步:进入www.mchange.com/projects/c3…,找到与c3p0配套的依赖包mchange commons版本

第四步:进入mvnrepository.com/artifact/co…,下载对应版本的mchange commons,导入eclipse

创建C3P0DataSource类连接池