使用 JDBC 处理 SQL语句
一般使用 JDBC 处理 SQL语句 ,遵循以下几个步骤: 详情参看: oracle 官网 JDBC Basics
★ 建立 一个 连接
★ 创建一个 statement
★ 执行查询
★ 处理结果集对象(ResultSet 对象)
★ 关闭连接
建立连接
通常,JDBC 应用连接目标数据源使用以下两个类中的一个:
★ DriverManager 该实现类通过指定数据库 的 url 连接数据库 ,在连接数据库之前,必须要手动加载 JDBC 驱动 。然后 他会自动加载 类路径下的任意的 JDBC 驱动。
加载 JDBC 驱动(以 mysql 为例):
引用 mysql 驱动 jar 包
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
★ DataSource 相比 DriverManager 实现类,该接口是首选的 ,因为该接口可以设置数据源的底层信息。DataSource 支持 数据库连接池 和 分布式事物。
使用 DataSource 对象获取连接
创建 Statement
一个 Statement 代表 一条 SQL 语句 的接口 ,通过 执行 Statement 对象 ,生成 ResultSet 对象 。
有以下三种 Statement:
★ Statement
★ PreparedStatement (继承 Statement) :用于预编译 可能包含输入参数的 SQL 语句 ,通过 Connection 对象获取 ,可以动态设置输入参数,以 ?(问号)作为占位符。
package com.ycit;
import org.junit.Test;
import java.sql.*;
/**
* Created by xlch on 2016/11/10.
*/
public class DbConnection {
@Test
public void connection() {
Connection connection = null;
PreparedStatement statement = null;
try {
Class.forName("com.mysql.jdbc.Driver"); // java 反射
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/xlch", "root", "root");//参数分别代表 url 、userName 、password
statement = connection.prepareStatement("select * from user where id = ?");
statement.setInt(1, 1);//动态设置 id 为 1,index 为 1(起始为1)
ResultSet set = statement.executeQuery();
while (set.next()) {
System.out.println("id===" + set.getInt("id") + " name===" + set.getString(2));//可以通过 index 或者 labelName 获取
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
★ CallableStatement (继承 PreparedStatement)
执行查询
查询方法有如下几种:
★ execute()
如果执行后返回的是 一个 ResultSet 对象 ,则返回 true ,否则 返回 false. 如果为 true ,则可以再次调用 statement.getResultSet() 获取结果集。
★ executeQuery() : 返回 ResultSet 结果集。
★ executeUpdate() :返回 一个整数 ,代表被影响的记录数 ,当 insert 、delete 、update 时 使用 该方法。
处理 结果集(ResultSet)对象
见 上面栗子。
关闭连接
见上面栗子。
使用事物
con.setAutoCommit(false); //开始时
con.rollback();//发生异常时回滚
con.commit();//结束时提交
事物的四种隔离级别
Isolation Level | Transactions | Dirty Reads | Non-Repeatable Reads | Phantom Reads |
---|---|---|---|---|
TRANSACTION_NONE | Not supported | Not applicable | Not applicable | Not applicable |
TRANSACTION_READ_COMMITTED | Supported | Prevented | Allowed | Allowed |
TRANSACTION_READ_UNCOMMITTED | Supported | Allowed | Allowed | Allowed |
TRANSACTION_REPEATABLE_READ | Supported | Prevented | Prevented | Allowed |
TRANSACTION_SERIALIZABLE | Supported | Prevented | Prevented | Prevented |