一、JDBC的常用接口和类:
1、DriverManager:主要用于管理JDBC驱动的服务类。在程序中使用该类的主要功能是获取Connection对象,该类包含如下方法:
- public static synchronized Connection getConnection(String url, String user, String password) throws SQLException:该方法获取数据库的连接。
2、Connection:代表数据库连接对象,而每一个Connection代表一个物理连接会话。要想访问数据库就必须先获得数据库的连接,否则无法对数据库进行操作。常见方法如下:
- Statement createStatement() throws SQLException:该方法返回一个Statement对象
- PreparedStatement prepareStatement(String sql) throws SQLException:该方法返回预编译的Statement对象,即将SQL语句提交到数据库进行预编译。
- CallableStatement prepareCall(String sql) throws SQLException:该方法返回CallableStatement对象,该对象用于调用存储过程。
注:想要执行SQL语句应先获取Statement对象。
Connection控制事务的方法:
- Savepoint setSavepoint():创建一个保存点
- Savepoint setSavepoint(String name):以指定名字来创建一个保存点
- void setTransactionIsolation(int level):设置事务的隔离级别
- void rollback():回滚事务
- void rollback(Savepoint savepoint):将事务保存到指定的保存点
- void setAutoCommit(boolean autoCommit):关闭自动提交,打开事务
- void commit():提交事务
3、Statement:用于执行SQL语句的工具接口。该对象既可以用于执行DDL、DCL语句,也可以用于执行DML语句,还可以用于执行SQL查询。当执行SQL查询时,返回查询到的结果集。常用方法如下:
- ResultSet executeQuery(String sql) throws SQLException:该方法用于执行查询语句,并返回查询结果对应的ResultSet对象。该方法只能用于执行查询语句。
- int executeUpdate(String sql) throws SQLException:该方法用于执行DML语句,并返回受影响的行数,该方法也可用于执行DDL语句,执行DDL语句将返回0。
- boolean execute(String sql) throws SQLException:该方法可执行任何SQL语句。
4、PreparedStatement:预编译的Statement对象。PreparedStatement是Statement的子接口,它允许数据库预编译SQL语句(这些SQL语句通常带有参数),以后每次只改变SQL命令的参数,避免数据库每次都需要编译SQL语句,故性能更好,实际开发中用的较多。独有(异于Statement)的方法:
- void setXxx(int parameterIndex, Xxx value):该方法根据传入的参数值的类型不同,需要使用不同的方法。传入的值根据索引传给SQL语句中指定位置的参数。
5、ResultSet:结果集对象。该对象包含访问查询结果的方法,ResultSet可以通过列索引或列名称获得列数据。它包含了如下常用的方法来移动记录指针。
- void close():释放ResultSet对象
- boolean absolute(int row):将结果集的记录指针移动到第row行,如果row是负数,则移动到倒数第row行。如果移动后的记录指针指向一条有效记录,则该方法返回true。
- void beforeFirst():将ResultSet的记录指针定位到首行之前,这是ResultSet结果集记录指针的初始状态----记录指针的起始位置位于第一行之前。
- boolean first():将ResultSet的记录指针定位到首行。如果移动后的记录指针指向一条有效记录,则该方法返回true
- boolean previous():将ResultSet的记录指针定义到上一行,如果移动后的记录指针指向一条有效记录,则该方法返回true
- boolean next():将ResultSet的记录指针定位到下一行,如果移动后的记录指针指向一条有效记录,则该方法返回true
- boolean last():将ResultSet的记录指针定位到最后一行,如果移动后的记录指针指向一条有效记录,则该方法返回true
- void afterLast():将ResultSet的记录指针定位到最后一行之后。
二、JDBC的编程步骤
1、加载数据库驱动,通常采用Class类的forName() 静态方法来加载驱动。
//加载驱动Class.forName(driverClass);//加载MySQL的驱动Class.forName("com.mysql.jdbc.Driver");- //加载Oracle的驱动
- Class.forName("oracle.jdbc.driver.OracleDriver");
2、通过DriverManager获取数据库连接:
//获取数据库连接DriverManager.getConnection(String url, String user, String password);//MySQL数据库URL的写法jdbc:mysql://hostname:port/databasename//Oracle数据库URL的写法jdbc:oracle:thin:@hostname:port:databasename
3、通过Connection对象创建Statement对象。创建方法有如下几个:
- createStatement():创建基本的Statement对象
- preparedStatement(String sql):根据传入的SQL语句创建预编译的Statement对象
- preparedCall(String sql):根据传入的SQL语句创建CallableStatement对象
4、使用Statement执行SQL语句。所有的Statement都有如下三个方法来执行SQL语句
- execute():可以执行任何SQL语句,但比较麻烦
- executeUpdate():主要用于执行DML和DDL语句。执行DML语句返回受SQL语句影响的行数,执行DDL语句返回0
- executeQuery():只能执行查询语句,执行后返回代表查询结果的ResultSet对象
5、操作结果集。
6、释放数据库资源,关闭连接。
简单示例:
package com.sqq.mystudy.JDBC;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class JDBCTest {public static void main(String[] args) {try {//1、加载MySQL数据库驱动Class.forName("com.mysql.jdbc.Driver");//2、使用DriverManager获取数据库连接Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mytest","root","pwd");//3、使用Connection创建一个Statement对象Statement stmt = conn.createStatement();//4、执行SQL语句ResultSet rs = stmt.executeQuery("SELECT * FROM mtest");while (rs.next()) {System.out.println(rs.getInt(1) + "\t"+ rs.getString(2) + "\t\t"+ rs.getString(3));}rs.close();stmt.close();conn.close();} catch (Exception e) {System.out.println(e);}}}
运行结果:

三、事务处理
1、事务
- 概念:事务是由一步或多步数据库操作序列组成的逻辑执行单元,这一系列的单元要么全部执行,要么全部放弃执行。(程序和事务是两个不同的概念。一般而言,一个程序中可能包含多个事务)
- 事务的特性(4个): 原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、和持续性(Durability)。简称为 ACID性
- MySQL默认关闭事务(如果打开会自动提交),若要开启MySQL的事务支持,可以显示调用如下命令:
SET AUTOCOMMIT = {0 | 1} #0为关闭自动提交,即开启事务
- 如果只想临时性的开启事务,可以使用 start transaction 或者 begin
2、JDBC的事务支持
- JDBC连接的事务支持由Connection提供,Connection默认打开自动提交,即关闭事务。此时的每条SQL语句一旦执行,便会立即提交到数据库,永久生效,无法进行回滚操作; 如果想要关闭,可以调用Connection的setAutoCommit()方法来关闭自动提交,开启事务:
//关闭自动提交,开启事务conn.setAutoCommit(false);
- 此时使用Statement对象执行SQL语句之后,必须调用Connection的commit()方法来手动提交事务:
//提交事务conn.commit();
- 如果有SQL语句执行失败,此时也可以使用Connection的rollback()方法来回滚事务:
//回滚事务conn.rollback();
- 简单的示例:
public static void commitTransaction(String[] sqls) {//加载驱动try {Class.forName(dbPar.getDriver());Connection conn = null;try {conn = DriverManager.getConnection(dbPar.getUrl(),dbPar.getUser(), dbPar.getPassword());//关闭自动提交事务conn.setAutoCommit(false);Statement stmt = conn.createStatement();for (String sql : sqls) {System.out.println(sql);}//提交事务conn.commit();//关闭连接conn.close();} catch (SQLException e) {e.printStackTrace();}} catch (ClassNotFoundException e) {e.printStackTrace();}}
不喜勿喷,谢谢支持
浙公网安备 33010602011771号