JDBC简介
JDBC概念:
- JDBC就是使用Java语言操作关系型数据库的一套API
- 全称:Java数据库连接
JDBC快速入门
步骤:
创建工程导入jar包
-
注册驱动
Class.forName("com.mysql.jdbc.Driver");
-
获取连接
Connection conn=DriverManager.getConnection(url,username,password);
-
定义SQL语句
String sql="update...";
-
获取执行SQL对象
Statement stmt=conn.createStatemet();
-
执行SQL
stmt.executeUpdate(sql);
-
处理返回结果
-
释放资源
JDBC API详解
DriverManager
- DriverManaget(驱动管理类)作用:
- 注册驱动
- 获取数据库连接
Connection
-
Connection(数据库连接对象)作用:
-
获取执行SQL的对象
- 普通执行SQL对象
Statement createStatement();
- 预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement(sql);
-
管理事务
- MySQL事务管理
开启事务:BEGIN; /START TRANSACTION;
提交事务:COMMIT;
回滚事务:ROLLBACK;
MySQL默认自动提交 - JDBC事务管理:Connection接口中定义了三个对应的方法
开启事务:setAutoCommit(boolean autoCommit):true为自动提交事务;false为手动提交事务,即为开启事务
提交事务:commit()
回滚事务:rollbackI()
- MySQL事务管理
-
Statement
-
Statement作用
执行SQL语句
-
执行SQL语句
Int executeUpdate(sql):执行DML、DDL语句
返回值:(1)DML语句影响的行数(2)DDL语句执行后,执行成功也可能返回0
ResultSet executeQuery(sql):执行DQL语句
返回值:ReseltSet结果集对象
ResultSet
-
ResultSet(结果集对象)作用:
-
封装了DQL查询语句的结果
ResultSet stmt.executeQuery(sql):执行DQL语句,返回ResultSet对象
-
-
获取查询结果
boolean next();
(1)将光标从当前位置向前移动一行
(2)判断当前行是否为有效行
返回值:
true:有效行
false:无效行
x x x getXxx(参数):获取数据
PrepareStatement
-
PreparedStatement作用:
- 预编译SQL语句并执行
- 预防SQL注入问题:将敏感字符进行转译
-
SQL注入
SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法
-
获取PreparedStatement对象
//SQL语句中的参数值,使用?占位符替代 String sql = "select * from user where username=? and password=?"; //通过Connection对象获取,并传入对应的sql PreparedStatement pstmt = conn.preparedStetement(sql);
-
设置参数
PreparedStatement对象:setXxx(参数1, 参数2):给?赋值
-
执行SQL
executeUpdate(); / executQuery();
数据库连接池
-
简介
- 数据库连接池是一个容器,负责分配、管理数据库连接
- 它允许应用程序重复使用一个现有的数据库连接,而不是重建一个
- 释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接引起的数据库连接遗漏
- 好处:
- 资源重用
- 提升相应速度
- 避免数据库连接遗漏
-
实现
-
标准接口:DataSource
-
官方提供的数据库连接池标准接口,由第三方组织实现此接口
-
功能:获取连接
Connection getConnection()
-
-
常见的数据库连接池
- DBCP
- C3P0
- Druid
-
Druid(德鲁伊)
- Druid连接池是阿里巴巴开源的数据库连接池项目
- 功能强大,性能优秀,是java语言最好的数据库连接池之一
-
Druid使用步骤
- 导入jar包
- 定义配置文件
- 加载配置
- 获取数据库连接池对象
- 获取连接