JDBC
资料来自优极限
学习目标
JDBC
JDBC: java database connectivity
JDBC是一种用于数据库访问的 API ,由一组用Java语言编写的类和接口组成,有了JDBC就可以用统一的语法对多种关系数据库进行访问,而不用担心其数据库操作语言的差异,存储在 java.sql.*; 包下。
图片转自:
https://blog.csdn.net/hyf24/article/details/124494094
角色分类
- 服务器 (db)
- 接收 sql
- 执行 sql
- 返回结果
- 客户端 (java)
- 接收数据
- 组装sql
- 发送SQL(与数据库建立联系)
- 分析结果
面向接口编程
1、java 制定标准 ,不同的数据库厂商实现 接口即可。java 中提供的接口 java.sql.* 包下,常用接口如下
接口名称 | 作用 |
---|---|
java.sql.Connection | 连接 |
java.sql.Statement | 静态处理块 |
java.sql.PreparedStatement | 预处理块 |
java.sql.ResultSet | 结果集 |
java.sql.ResultSetMetaData | 结果集元信息 |
2、oracle 厂商实现接口 (jar)
F:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib\ojdbc6.jar 视安装路径而定
jdbc步骤
类比送快递 | JDBC步骤 |
---|---|
1、选择快递公司 | 加载驱动(完整路径) |
2、与快递公司建立联系(电话号码 唯一信息) | 建立连接(url 用户名 密码) |
3、快递员 收包裹 | 创建处理块 Statement PreparedStatement |
4、打包 投递 | 执行: execute(ddl) int executeUpdate(dml) ResultSet executeQuery(select) |
5、签收 | 分析结果 :ddl -->没有异常 dml—>>0 select–>分析结果集 |
6、打发走人 | 释放资源 |
核心为拼接SQL、分析结果、操作结果
连接
准备工作
- 引入驱动包
- 构建路径 build path
- 测试用户是否正确登录
建立连接
连接字符串
驱动: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@db 服务器地址:端口:实例
连接 url->jdbc:oracle:thin:@localhost:1521:XE
用户名: SCOTT
密码: TIGER
编写测试类
加载驱动
- 硬编码: new oracle.jdbc.driver.OracleDriver();
- 软编码: class.forName(“oracle.jdbc.driver.OracleDriver”)
建立连接
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","SCOTT ","TIGER");
处理块
静态处理块Statement
Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的 SQL 语句。Statement 对象,用于执行不带参数的简单 SQL 语句。
执行静态 SQL 语句并返回它所生成结果的对象。
创建 :
连接.Connection.createStatement()
执行
ddl -->execute(dd语句) – 通常不会在代码中执行
dml -->executeUpdate(dml语句)
select -->executeQuery(select)
特点
处理 不变的静态的 sql 语句
优点: 直接查看sql ,方便处理错误
缺点:性能不高 拼接 sql 麻烦 可能存在 sql 注入
预处理块 PreparedStatement
PreparedStatement 接口继承了 Statement,并与之在两方面有所不同:有人主张,在 JDBC 应用中,如果你已经是稍有水平开发者,你就应该始终以 PreparedStatement 代替 Statement.也就是说,在任何时候都不要使用 Statement。
优点:
- 由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement对象。因此,多次执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率。
- 防止SQL注入问题
创建
创建:连接.prepareStatement(sql)
执行
存在**?** ,先填充参数再执行
ddl -->execute()
dml -->executeUpdate()
select -->executeQuery()
特点
处理 不变的静态的 sql 语句 |可变的 sql 语句 带 ? 的 sql
优点:性能高,方便编写sql 不存在sql注入 安全
缺点:不能直接打印sql语句 不方便处理错误
分析
执行完SQL 语句后可能成功也可能失败,如果成功,有数据则我们很大一部分情况是需要获取查询的结果。数据就是一切
ddl:没有异常就是成功
dml: 结果>0就是成功
select:分析结果集
对于 select 的结果集进行分析,类似于迭代器, 先判断(移动)再获取
next()
getXxx(索引|列名|别名)
释放资源
完SQL 语句后可能成功也可能失败,如果成功,有数据则我们很大一部分情况是需要获取查询的结果。数据就是一切
ddl:没有异常就是成功
dml: 结果>0就是成功
select:分析结果集
对于 select 的结果集进行分析,类似于迭代器, 先判断(移动)再获取
next()
getXxx(索引|列名|别名)
释放资源
释放资源的原则是 先打开的后关闭, 则我们的顺序一般为: 结果集->处理块->连接