今日知识
JDBC 基本概念
快速入门
对 JDBC 中各个接口和类详解
JDBC:
1. 概念: Java DataBase Connectivity Java 数据库连接, Java 语言操作数据库
* JDBC 本质: 其实是官方 (sun 公司) 定义的一套操作所有关系型数据库的规则, 即接口. 各个数据库厂商去实现这套接口, 提供数据库驱动 jar 包. 我们可以使用这套接口 (JDBC) 编程, 真正执行的代码是驱动 jar 包中的实现类.
2. 快速入门
* 步骤:
1. 导入驱动 jar 包 MySQL-connector-java-5.1.37-bin.jar
1. 复制 MySQL-connector-java-5.1.37-bin.jar 到项目的 libs 目录下
2. 右键 -->Add As Library
2. 注册驱动
3. 获取数据库连接对象 Connection
4. 定义 sql
5. 获取执行 sql 语句的对象 Statement
6. 执行 sql, 接受返回结果
7. 处理结果
8. 释放资源
* 代码实现:
- //1. 导入驱动 jar 包
- //2. 注册驱动
- Class.forName("com.mysql.jdbc.Driver");
- //3. 获取数据库连接对象
- Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");
- //4. 定义 sql 语句
- String sql = "update account set balance = 500 where id = 1";
- //5. 获取执行 sql 的对象 Statement
- Statement stmt = conn.createStatement();
- //6. 执行 sql
- int count = stmt.executeUpdate(sql);
- //7. 处理结果
- System.out.println(count);
- //8. 释放资源
- stmt.close();
- conn.close();
JDBC: 封装
1. 新建文件 db.properties
- // 存放对应的键值对
- driverClass=com.MySQL.jdbc.Driver
- url=jdbc:MySQL://localhost:3306/test?characterEncoding=utf8
- user=root
- password=123456
2. JDBCUtils 编写
public class JDBCUtils {
-- 获取 Connection 对象
- public static Connection getConnection() throws Exception{
- Connection connection = null;
- // 加载 Driver 类
- Properties properties=new Properties();// 获取键值对
- // 获取输入流, 读取文件
- properties.load(new FileReader("db.properties"));
- String driver=properties.getProperty("driverClass");
- String url=properties.getProperty("url");
- String user=properties.getProperty("user");
- String password=properties.getProperty("password");
- //2. 注册驱动
- Class.forName(driver);
- // 3. 获取数据库连接对象 Connection
- connection= DriverManager.getConnection(url,user,password);
- return connection;
- }
-- 释放资源
- public static void releaseResource(Connection connection, Statement statement, ResultSet resultSet){
- if (connection!=null){
- try {
- connection.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- if (statement!=null){
- try {
- statement.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- if (resultSet!=null){
- try {
- resultSet.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- }
对 JDBC 中各个接口和类详解
1. DriverManager: 驱动管理对象
* 功能
1. 注册驱动
Class.forName("com.mysql.jdbc.Driver");
2. 获取数据库连接
Connection connection= DriverManager.getConnection(url,user,password);
* 参数:
* URL: 指定的链接的路径
*url=jdbc:MySQL://localhost:3306/test?characterEncoding=utf8
* user: 用户名
* password: 密码
2. Connection
* 功能:
1. 获取执行 SQL 的对象
- *PreparedStatement preparedStatement(String sql):
- *Statement creatStatement();
2. 管理事务
1. 开启事务:*con.setAutoCommit(false): 开启事务
2. 回滚: rollback;
* 在 catch 中回滚事务
3. 提交事务: commit;
3. Statement: 执行 sql 的对象
* 功能:
- boolean execute(String sql);// 执行任意类型的 sql 语句
- int executeUpdate(String sql);// 执行任意类型的 sql 语句 执行 DML(insert,update,delete),DDL(create,alter,drop)
* 返回值影响行数, 可以通过返回值判断 DML 语句是否执行成功
3. ResultSet executeQuery(String sql):DQL(select)类型
4. ResultSet:
* 功能
*next(): 游标下移一个
*st.next(): 判断当前行是否是最后一行
*getXxx(): 获取值, Xxx 代表获取的值的类型
getXxx(int i): 获取值
i: 代表列, 第 i 列
例如: getString(1);
getXxx(String i): 获取值
i: 代表列的属性值
例如; getString("id");
5. PreparedStatement
* 功能:
使得 sql 执行语句分两步执行, 防止用户使用 sql 的关键字达到非法访问数据库的目的
例如:
- //2. 定义 sql 语句
- String sql="insert into account values(null,?,?)";
- // 定义 sql 语句执行对象, 防止注入
- PreparedStatement st=con.prepareStatement(sql);
- // 给? 赋值
- st.setString(1, xxx);
- st.setString(2, xxx);
- // 执行 sql
- rs=st.executeQuery(sql);
来源: http://www.bubuko.com/infodetail-3099823.html