JDBC
1.什么是JDBC:
全称: Java DataBase Connectivity
翻译: java 数据库连接
理解: Java语言来操作数据库
JDBC本质: 其实就是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口.
各大数据库厂商去实现这套接口,提供数据库驱动jar包.
我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类.
2.JDBC的使用连接步骤:
a.导入驱动jar包
b.注册驱动
c.获取数据库连接对象 Connection
d.定义sql
e.获取执行sql语句的对象 Statement
f.执行sql,接收返回结果
g.处理结果
h.释放资源
JDBC规范:
1.导入jar包
2.加载驱动 com.mysql.cj.jdbc.Driver
3.获取连接 DriverManager -> Connection
url username password
url -> jdbc:mysql://localhost:3306/database
jdbc:mysql:///database
4.定义sql
Statement / preparedStatement(预编译对象)
5.执行sql:
execute() -> boolean
DQL/DML/DDL
executeUpdate() -> int
DML
executeQuery() -> ResultSet
DQL
6.如果有结果,处理结果ResultSet -> next()
7.释放资源
prepareStatement(预编译对象)
select * from user where id = ?
JDBC的封装 -> 封装成工具类 -> 配置文件
3.详解各个对象
1)DriverManager: 驱动管理对象
作用:
a.注册驱动:告诉程序该使用哪一个数据库驱动jar
b.获取数据库连接
2)Connection对象: 数据库连接对象
作用:
a.获取执行sql 的对象
Statement createStatement()
b.管理事务:
手动开启事务:setAutoCommit(boolean)
方法参数设置成false.手动开启事务
提交事务:commit()
回滚事务:rollback()
3)Statement对象: 指定sql的对象
执行sql的三个方法:
(1).boolean execute(String str)
DDL/DML:返回fasle DQL:返回true
返回值: 指的是有没有结果
因为 DML 和 DQL都有专门的执行方法,
所以该方法通常用来指定DDL
(2).int executeUpdate(String str)
只能执行DML
返回值: 表示影响了几行
(3).ResultSet executeQuery(String str)
只能执行DQL
返回值: 查询出来的结果集
Connection conn = JDBCutils.getConnection();
String sql = "insert into user values(?,?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
for (int i = 0; i < 10; i++) {
pstmt.setInt(1,i);
pstmt.setString(2,"张三"+i);
pstmt.setInt(3,12);
//不马上执行sql
//添加到执行sql的队列中
pstmt.addBatch();
}
//pstmt.executeUpdate();
//批量执行sql队列中的所有语句
pstmt.executeBatch();
//清空之前的执行队列
pstmt.clearBatch();
4.数据库连接池
1.概念:
其实就是一个容器,存放数据库连接的容器
当系统初始化好后,这个容器就会被创建,在容器中会申请一些连接对象
当用户访问数据库时,就会从容器中获取连接对象
当用户访问完之后,会将连接对象归还给容器
2.好处:
a.节约资源
b.节省内存空间
3.连接池规范(接口):
a.标准接口: DataSource -> javax.sql包
方法:
获取连接: getConnection()
归还连接: Connection.close()
b.市面上常见的连接池
a.Apache - dbcp
b.c3p0
c.阿里 - druid
5.C3P0连接池:
1.使用第三方连接池步骤:
a.导入jar包
c3p0-0.9.5.2.jar
mchange-commons-java-0.2.11.jar
b.定义配置文件:
名称(固定形式): c3p0.properties 或者 c3p0-config.xml
存放配置文件的路径: 必须在类路径的根目录下 - 可以理解成存在文件src目录下
c.创建数据库连接池对象: ComboPoolDtataSource
d.获取连接: getConnection
2.JDBC的连接 和 连接池连接的区别
a.通过连接池获取的连接关闭后,
连接对象返回给连接池,它的引用会设置为null
b.通过JDBC获取的连接关闭后,
连接对象还在,但是状态是’已关闭状态’是不能再使用的.
6.Druid连接池:
1.使用步骤:
a.导入jar包
b.定义配置文件:
是properties形式,可以是任意名称,可以放在任意目录下
(意味着不会自动加载,需要手动调用)
c.加载配置文件. xx.properties
d.获取数据库连接池对象:
通过工厂方式来获取: DruidDataSourceFactory
e.获取连接: getConnection
2.定义工具类
a.定义一个类(类名随意) DruidUtils
b.提供静态代码块加载配置文件,初始化连接池对象
c.提供方法
①.获取连接方法:通过数据库连接池获取连接
②.获取连接池的方法
③.释放资源
练习: 对emp表进行URUD操作
1.增加数据
2.修改数据
3.删除数据
4.查询数据
a.根据id查询
b.查询所有数据
c.查询总数量
7.JDBCTempla
JDBCTemplate -> DBUtils(Apache)
1.Spring框架对JDBC的简单封装
提供了一个JDBCTemplate对象来简化JDBC的开发
2.使用步骤:
a.导入jar包
b.创建JDBCTemplate对象,依赖于DataSource
c.调用JDBCTemplat的方法来完成CRUD操作
3.常用方法:
update():DML语句 增删改操作
queryForMap():查询结果将结果集封装成map集合
queryForList():查询结果将结果集封装成list集合
query():查询结果将结果集封装成JavaBean对象
queryForObject():查询结果,将结果封装成对象