本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、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包粘贴进入
第二步:鼠标右键点击mysql-connector-java-5.1.40-bin.jar,选择Build Path中的Add to Build Path则得到如下结果,多了一个引用的库即导入成功
七、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类连接池