17.JDBC
17.1 JDBC概述
JDBC(Java DataBase Connectivity) java数据库连接。是一套通过java操作数据的公共规范。
JDBC可以为多种关系型数据库提供统一的访问接口。
17.2 JDBC快速入门
JDBC实现步骤
- 导入数据库jdbc驱动包
- 配置数据库连接相关信息
- 通过DriverManager加载数据库连接信息创建Connection对象连接数据库
- 通过Connection对象创建Preparestatement对象发送sql到数据库并执行
- 通过Preparestatement对象创建Result对象获取sql执行结果
- 遍历ResultSet对象,提取sql执行结果
代码演示说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public class JDBCTest {
public static void main(String[] args) throws Exception { String driverClass = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/eshop"; String user = "root"; String password = "111111";
Class.forName(driverClass); Connection conn = DriverManager.getConnection(url, user, password); PreparedStatement pst = conn.prepareStatement( "select id, product_type_name from t_product_type"); ResultSet rs = pst.executeQuery(); while(rs.next()) { System.out.println("id: " + rs.getString(1) + " type: " + rs.getString(2)); } } }
|
17.3 JDBC实现类说明
Connection
接口:与特定数据库的连接(会话)。描述其表、所支持的 SQL 语法、存储过程、此连接功能等等的信息。
PreparedStatement
接口:表示预编译的 SQL 语句的对象。SQL 语句被预编译并存储在 PreparedStatement
对象中。然后可以使用此对象多次高效地执行该语句。
ResultSet
接口:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。ResultSet
对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。next
方法将光标移动到下一行;因为该方法在 ResultSet
对象没有下一行时返回 false
,所以可以在 while
循环中使用它来迭代结果集。
17.4 JDBC事务管理
事务是数据库中非常重要的一个特性,事务属于原子性操作,是数据库执行过程中的一个逻辑单位,要么全部成功要么全部失败。
Connection接口中的事务操作
pulic void commit()
事务提交
pulic void rollback()
事务回滚
pulic void setAutoCommit(boolean autoCommit)
执行是否自动提交事务,默认自动提交事务
代码演示说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| public class JDBCTest {
public static void main(String[] args) throws SQLException { String driverClass = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/eshop"; String user = "root"; String password = "111111";
Connection conn = null;
try { Class.forName(driverClass); conn = DriverManager.getConnection(url, user, password); conn.setAutoCommit(false); PreparedStatement pst = conn.prepareStatement("insert into t_product_type(id, product_type_name, product_type_desc) values(uuid(),?,?)"); pst.setString(1, "测试产品"); pst.setString(2, "测试产品"); int count = pst.executeUpdate(); conn.commit(); System.out.println("count: " + count); } catch (Exception e) { e.printStackTrace(); conn.rollback(); }
} }
|
17.5 JDBC工具类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| public class JdbcTemplate {
private static final String driverClass = "com.mysql.jdbc.Driver"; private static final String url = "jdbc:mysql://localhost:3306/eshop"; private static final String user = "root"; private static final String password = "111111";
private static Connection conn = null;
public static Connection getConnection() { try { Class.forName(driverClass); return DriverManager.getConnection(url, user, password); } catch (Exception e) { e.printStackTrace(); return null; } }
public static ResultSet executeQuery(String sql, Object... args) { try { if(conn == null) { conn = getConnection(); }
PreparedStatement pst = conn.prepareStatement(sql); setParameters(pst, args); return pst.executeQuery(); } catch (Exception e) { e.printStackTrace(); return null; } }
public static int executeUpadte(String sql, Object... args) { try { if(conn == null) { conn = getConnection(); }
PreparedStatement pst = conn.prepareStatement(sql); setParameters(pst, args); return pst.executeUpdate(); } catch (Exception e) { e.printStackTrace(); return 0; } }
public static void setParameters(PreparedStatement pst, Object... args) throws SQLException { if(args != null && args.length > 0) { for (int i = 0; i < args.length; i++) { pst.setObject(i + 1, args[i]); } } } }
|