Java解惑 之 MySQL与JDBC编程
catch rec static poi last 进行 ddl span
一、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 如果执行后第一个结果为受影响的行数或没有任何结果,则返回 false4、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、事务
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(); } }
-
Java 解惑 之 MySQL 与 JDBC 编程
来源: http://www.bubuko.com/infodetail-2091270.html