JDBC
JDBC概念:
- JDBC就是使用Java语言操作关系型数据库的一套API
- 全称:Java DataBase Connectivity Java数据库连接
JDBC本质:
- 官方定义的一套操作所有关系型数据库的规则,即接口
- 各个数据库厂商实现这套接口,提提供数据库驱动jar包
- 我们可以使用这套接口(JDBC)编程,真正执行的代码时驱动jar包中的实现类
JDBC好处:
-
Java代码不需要针对不同数据库分别开发
-
可以随时替换底层数据库,访问数据库的Java代码基本不变
JDBC快速入门
0、创建工程,导入驱动jar包
1、注册驱动
Class.forName("com.mysql.jdbc.Driver");
2、获取连接
Connection con = DriverManager.getConnection(url, username, password);
3、定义SQL语句
String sql ="update ...";
4、获取执行SQL对象
Statement stmt = con.createStatement();
5、执行SQL
stmt.executeUpdate(sql);
6、返回处理结果
7、释放资源
stmt.close();
con.close();
JDBC API详解
-
DriverManager(驱动管理类):
1、注册驱动
2、获取数据库连接
- url:连接路径 (jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1?参数键值对2)
- user:用户名
- password:密码
-
Connection
1、获取执行SQL的对象
-
Statement createStatement() //普通执行SQL对象
-
PrepareStatement prepareStatement(sql) //预编译SQL的执行SQL对象:防止SQL注入
-
CallableStatement prepareCall(sql) //执行存储过程的对象
2、管理事务
-
MySQL事务管理
-
JDBC事务管理:Connection 接口中定义了3个对应的方法
- 开启事务:
//true为自动提交事务;false为手动提交事务,即为开启事务 setAutoCommit(boolean autoCommit):
- 提交事务
commit()
- 回滚事务
rollback()
-
-
Statement
1、执行SQL语句
-
executeUpdate(); //执行DML、DDL语句 返回值:(1)DML语句影响的行数 (2)DDL语句执行后,执行成功可能返回0
-
ResultSet executeQuery(sql); //执行DQL语句 返回值:ResultSet结果集对象
-
-
ResultSet
1、封装了DQL查询语句的结果
//获取查询结果 (1)将光标当前位置向前移动一行 (2)判断当前行为是否有效行 boolean next(); //获取数据,参数可以是列名或者数字 xxx getXxx(参数):获取数据 xxx:数据类型,如: int getint(参数)
使用步骤:
//循环判断游标是否是最后一行末尾 while(rs.next()){ //获取数据 rs.getXxx(参数); }
-
PreparedStatement(继承自Statement)
1、预编译SQL并执行SQL语句**(使用时url后要加参数useSeverPrepStmts=true)**
-
获取PreparedStatement对象
//SQL语句中的参数值,使用 ? 占位符替代 String sql = "select * from user where username = ? and password = ?"; //通过Connection 对象获取,并传入对应的sql语句 PreparedStatement psmt = conn.preparedStatement(sql);
-
设置参数值
PreparedStatement对象:setXxx(参数1, 参数2) //给 ? 赋值
-
执行SQL
executeUpdate(); / executeQuery(); //不需要传递sql
2、PreparedStatement原理:(预编译性能更高;防止SQL注入:将敏感字符进行转义)
- 在获取PreparedStatement对象时,将sql语句发送给Mysql服务器进行检查,编译(耗时)
- 执行时不再进行这些步骤,速度更快
- 如果sql模板一样。则只需要进行一次检查,编译
-
数据库连接池
数据库连接池简介
- 是一个容器,负责分配、管理数据库连接
- 允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
- 释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏
- 好处:
- 资源重用
- 提升系统相应速度
- 避免数据库连接遗漏
数据库连接池实现
-
标准接口:DataSource
-
功能:获取连接
Connection getConnection()
-
-
常见数据库连接池:
- DBCP
- C3P0
- Druid
-
Druid(德鲁伊)
- Druid 连接池是阿里巴巴开源的数据库连接池项目
- 功能强大,性能优秀,是Java语言最好的数据库连接池没有之一
Druid使用步骤:
- 导入jar包 druid-1.1.12.jar
- 定义配置文件
- 加载配置文件
- 获取数据库连接池对象
- 获取连接