JDBC常用类和接口都在`java.sql`包中。
<br/>
**1. java.sql.Connection**
```java
//作用:与数据库建立连接
public interface Connection extends Wrapper, AutoCloseable {
//创建Statement对象
Statement createStatement() throws SQLException;
//创建预处理对象PrepareStatement
PreparedStatement prepareStatement(String sql) throws SQLException;
//是否自动提交事物
void setAutoCommit(boolean autoCommit) throws SQLException;
boolean getAutoCommit() throws SQLException;
//使所有上一次提交/回滚后进行的更改为持久更改,并释放此Connection对象当前持有的所有数据库锁。
void commit() throws SQLException;
//取消在当前事务中进行的所有更改,并释放此Connection对象当前持有的所有数据库锁。
void rollback() throws SQLException;
//立即释放此Connection对象的数据库和JDBC资源,而不是等待它们被自动释放。
void close() throws SQLException;
boolean isClosed() throws SQLException;
//设置当前Connection对象的读写模式,默认为非只读模式
void setReadOnly(boolean readOnly) throws SQLException;
//查看当前Connection对象的读取模式是否为只读形式
boolean isReadOnly() throws SQLException;
//创建预处理对象PrepareStatement
PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) throws SQLException;
...
}
```
**2. java.sql.Statement**
```java
//作用:用于在建立连接的基础上向数据库发送SQL语句
public interface Statement extends Wrapper, AutoCloseable {
//执行给定的SQL语句,该语句返回单个ResultSet对象
ResultSet executeQuery(String sql) throws SQLException;
int executeUpdate(String sql) throws SQLException;
//立即释放此Statement对象的数据库和JDBC资源,而不是等待它们被自动释放
void close() throws SQLException;
//执行静态的select语句,该语句可能返回多个结果集
boolean execute(String sql) throws SQLException;
//将给定的SQL命令添加到此Statement对象的当前命令列表中,
//如果驱动程序不支持批量处理,将抛出异常。
void addBatch( String sql ) throws SQLException;
//清空此Statement对象当前的SQL命令列表
void clearBatch() throws SQLException;
//将一批命令提交给数据库来执行,如果全部的命令执行成功,
//则返回由更新计数组成的数组。数组元素的排序与SQL语句的添加顺序对象
int[] executeBatch() throws SQLException;
...
}
```
![](https://img.kancloud.cn/5a/38/5a388813a32d6ddc2ef448ff2e7cfd22_1119x134.jpg)
* Statement: 该对象用于执行不带参数的简单的SQL语句。(不安全)
* PreparedStatement:继承了Statement,用来执行动态的SQL语句。(安全)
* CallableStatement:继承了PreparedStatement,用于执行对数据库存储过程的调用。(安全)
**3. java.sql.PreparedStatement**
```java
//作用:用来执行动态的SQL语句
public interface PreparedStatement extends Statement {
//执行SQL查询,并返回该查询生成的ResultSet对象
ResultSet executeQuery() throws SQLException;
//执行动态的insert、update、或delete语句,返回int为数据库中受影响的行数
int executeUpdate() throws SQLException;
//将指定位置的参数设置为NULL值
void setNull(int parameterIndex, int sqlType) throws SQLException;
//将指定位置的参数设置为boolean值
void setBoolean(int parameterIndex, boolean x) throws SQLException;
//将指定位置的参数设置为int值
void setInt(int parameterIndex, int x) throws SQLException;
//将指定位置的参数设置为long值
void setLong(int parameterIndex, long x) throws SQLException;
//将指定位置的参数设置为float值
void setFloat(int parameterIndex, float x) throws SQLException;
//将指定位置的参数设置为double值
void setDouble(int parameterIndex, double x) throws SQLException;
//将指定位置的参数设置为String值
void setString(int parameterIndex, String x) throws SQLException;
//将指定位置的参数设置为Date值
void setDate(int parameterIndex, java.sql.Date x) throws SQLException;
//清除当前所有参数的值
void clearParameters() throws SQLException;
...
}
```
**4. java.sql.DriverManager**
```java
//作用:该类用来管理数据库中的所有驱动程序。它是JDBC的管理层,
//作用在用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动程序之间建立连接
public class DriverManager {
//获取与数据库的连接
@CallerSensitive
public static Connection getConnection(String url, java.util.Properties info) throws SQLException {...}
//ser, String password) 指定数据库的URL、用户名、密码来获取与数据库的连接
@CallerSensitive
public static Connection getConnection(String url, String user, String password) throws SQLException {...}
//设置驱动程序试图登陆到某一数据库可以等待的最长时间,单位为秒
public static void setLoginTimeout(int seconds) {...}
//获取驱动程序试图登陆到某一数据库可以等待的最长时间,单位为秒
public static int getLoginTimeout() {...}
//将一条消息打印到当前的JDBC日志流中
public static void println(String message) {...}
...
}
```
**5. java.sql.ResultSet**
```java
//1. 作用:该接口类似于一个临时表,用来暂时存放数据库查询操作所获得的结果集。
//2. ResultSet实例具有指向当前数据行的指针,指针开始的位置在第一条记录的前面,可以通过next()方法将指针向下移。
//3. 到JDBC2.0(JDK1.2)后,该接口添加了一组更新方法updateXXX(),该方法有两个重载,分别可以根据列的索引和列的名称来更新指定的列。
//但这一组方法没有对数据进行的操作同步到数据库中,还需要执行updateRow(),或insertRow()方法更新数据到数据库。
public interface ResultSet extends Wrapper, AutoCloseable {
//将指针向下移一行
boolean next() throws SQLException;
//有许多的getXXX方法来获取当前ResultSet当前行指定列的值
Object getObject(String columnLabel) throws SQLException;
...
//判断指针是否位于当前ResultSet集合的第一行。如果是返回true,否则返回false。
boolean isFirst() throws SQLException;
//判断指针是否位于当前ResultSet集合的最后一行。如果是返回true,否则返回false。
boolean isLast() throws SQLException;
//将指针移动到集合的开头(第一行位置)
void beforeFirst() throws SQLException;
//将指针移到集合的尾部(最后一行位置)
void afterLast() throws SQLException;
//将指针移到当前记录的第一行
boolean first() throws SQLException;
//将指针移到当前记录的最后一行
boolean last() throws SQLException;
//获取当前行的索引号
int getRow() throws SQLException;
//将指针移动ResultSet给定编号的行
boolean absolute( int row ) throws SQLException;
//用对应的值类型更新指定的列
void updateInt(int columnIndex, int x) throws SQLException;
void updateInt(String columnLabel, int x) throws SQLException;
...
//当执行updateXXX方法后,还需要执行下面两个方法之一才能将数据同步到数据库
void insertRow() throws SQLException;
void updateRow() throws SQLException;
//删除当前行,但不同步到数据库中,而是在执行close() 方法后同步到数据库。
void deleteRow() throws SQLException;
...
}
```
- 网络通信
- 网络协议
- 端口和套接字
- TCP网络程序
- UDP网络程序
- 多线程聊天室
- 多线程
- 线程相关概念
- 线程实现方式
- 中断线程
- 线程生命周期
- 线程优先级
- 优先级规则
- 案例演示
- 线程同步机制
- 线程同步机制
- synchronized关键字
- ReentrantLock类
- Condition类
- 监视器概念
- volatile关键字
- final变量
- 死锁
- 线程局部变量
- 读/写锁
- 原子类
- 阻塞队列
- 工作规则
- 案例演示
- 常用阻塞队列
- 线程安全集合
- 高效的映射/集/队列
- 并发集视图
- 写数组的拷贝
- Arrays类的并行数组算法
- 同步包装器
- Callable与Future
- 执行器
- 线程池
- 预定执行
- 控制任务组
- Fork-Join框架
- 同步器
- 同步器
- 信号量
- CountDownLatch类
- CyclicBarrier类
- Exchanger类
- SynchronousQueue类
- 线程与Swing
- Swing与线程问题
- 两个原则
- Swing工作线程
- 单一线程规则
- 文件IO
- File类
- 文件输入输出
- ZIP压缩文件
- 集合
- 集合框架
- 集合接口
- 集合实现类
- 线程安全集合
- 集合算法
- 迭代器
- 集合排序
- JDBC
- JDBC是什么
- JDBC-ODBC桥
- JDBC驱动程序类型
- JDBC常用类与接口
- 数据库操作
- 连接数据库
- 增/删/改/查/预处理
- 事务
- 批处理
- commons-dbutils工具
- 安全问题
- Jedis
- 使用Jedis操作Redis数据库
- JSON转换
- 使用连接池
- 案例
- 单例破坏
- 单例定义
- 单例实现方式
- 懒汉式实现单例
- 饿汉式实现单例
- 单例破坏
- 类的单例破坏
- 枚举的单例破坏
- 克隆
- 克隆是什么
- 浅克隆
- 深克隆
- 注解
- 注解是什么
- 三大注解
- 内置注解
- 元注解
- 自定义注解
- NIO
- 相关概念
- BIO/NIO/AIO
- 多线程编程
- 线程同步
- 线程通信
- NIO
- NIO三大核心组件
- NIO网络编程
- NIO文件读写
- AIO
- Java8新特性
- Lambda表达式
- 方法引用
- 函数式接口
- 默认方法
- 什么是默认方法
- 默认方法语法格式
- 多个同名的默认方法问题
- 静态默认方法
- 默认方法实例
- Stream
- Stream是什么
- Stream示例
- Optional容器
- 新的日期时间API
- Base64
- SPI
- SPI是什么
- SPI与API的区别
- 常见场景
- 使用SPI需遵循的约定
- SPI使用步骤