一,jdbc
原理图
JDBC API
DriverManager
驱动管理器
根据不同的数据库加载不同的驱动
方法
获得连接对象
Connection getConnection(数据库服务器地址,数据库名称,账号,密码)
Connection
连接对象
建立和数据库的连接
方法1
获得SQL语句对象
Statement createStatement()
方法2
获得加强版SQL语句对象
PreparedStatement preparedStatement(String sql)
Statement/PreparedStatement
sql命令对象(select,insert,update,delete)
方法1
执行增删改,返回受影响的行数
int executeUpdate()
方法2
执行查询,结果集(对应了select查询出来的临时表)
ResultSet executeQuery()
ResultSet
代表执行select语句后的结果,结果集
方法1
boolean next(),还有没有下一行数据,有的话就返回true
方法2
Xxx getXxx(o),将结果集中o这列数据,读取成java中的Xxx类型数据
基本操作
添加数据
项目结构
添加目录lib,存放依赖的jar文件
注意,MySQL5的驱动是5.x,MySQL对应的驱动是8.x
添加引用
编写代码
添加一条数据
类似打电话找老师请假的步骤
找到电话
电话号码
拨打接通
说话请假
反馈得到结果
关断电话
修改数据
删除
查询
练习
有admin数据表
编写jdbc操作,实现输入账号,密码后进行登录,显示登录结果(成功和失败)
参考
sql注入
正常情况下
再尝试注入sql
Statement对象,只能使用字符串拼接,进行参数设定,容易被sql注入攻击
使用升级版PreparedStatement
代码
结果
二,jdbc代码升级
异常处理
升级前
代码
结果
升级后
代码
结果
代码冗余
连接数据库代码,获得连接的代码全都一样,冗余
增删改代码特别像,可以写成一个方法
释放资源代码,也都一样,统一处理
BaseDao
结合对象
数据库
属于“关系模型”,描述的是表间关系
java
属于“对象模型”,描述的是对象间关系
XxxDao
注意:
一般的dao,都会有这5个基本的数据操作方法
测试1
测试2
练习
编写Emp类和EmpDao类,并测试
三,数据库连接池
之前的conn的使用方式
创建conn-->打开conn-->使用conn-->关闭conn
四步走,一步也不能少
其中创建,打开,关闭,都是最耗资源的
jdbc/dao操作都很频繁,需要频繁的创建,打开,关闭效率很低,引入了“连接池”
连接池的思路
在“池”(集合)中,放入若干已经创建并打开过的连接,用的时候直接拿来用,用完之后,不用关闭, 放回池中即可,下次再用,直接拿
注意
连接池在市面上有很多,dbcp,c3p0,druid(阿里),代码不是关键,关键要理解连接池的原理
自己实现连接池
synchronized
在并发编程中存在线程安全问题,主要原因有:1.存在共享数据 2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized可以保证一个线程的变化可见(可见性),即可以代替volatile。
测试
结果
四,dbcp
配置文件
内容
连接池工具类
DataSource
测试
结果
五、DBUtils
之前的jdbc操作比较繁琐,很多都能统一处理,DBUtils是在我们学习MyBatis之前,适合
所有资料
其中
是核心jar
核心类
QueryRunner
构造方法
方法
ResultSetHandler
把结果集自动变成一个po类
把结果集自动变成一个List<PO>集合