一、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语句。
                如果执行后第一个结果为ResultSet对象,则返回true
 如果执行后第一个结果为ResultSet对象,则返回true                 如果执行后第一个结果为受影响的行数或没有任何结果,则返回false
 如果执行后第一个结果为受影响的行数或没有任何结果,则返回false 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()方法来手动提交事务:
- 如果有SQL语句执行失败,此时也可以使用Connection的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();
-         }
-     }
 
 
Java解惑 之 MySQL与JDBC编程
原文:http://www.cnblogs.com/sunqiangqiang/p/6914645.html