《JDBC_API》
<大纲>
1.DriverManager
2.Connection
3.Statement
4.ResultSet
5.资源的释放
1.DriverManager(驱动管理类)
1.注册驱动
- DriverManager.registerDriver(new Driver());
这个代码会导致驱动注册两次
因为在Driver这个类里面有一个静态代码块负责注册驱动
即当加载驱动,就会自动注册驱动
}class.forName(“com.mysql.jdbc.Driver”);
实际开发中使用这个代码加载驱动,就会自动注册驱动
2.获得连接
Connection conn = DriverManager.getConnection(url, user, root);
- jdbc :协议
- mysql:子协议
- localhost:IP地址、主机名
- 3306:端口号
- 本机mysql的url简写: jdbc:mys://jdbc
2.Connection
1.创建执行SQL语句的对象
- Statement stmt = conn.createStatement();
执行SQL语句,有SQL注入的漏洞存在,将SQL语句发送到数据库
- Statement stmt = conn.createStatement();
预编译、执行SQL语句,解决SQL注入的漏洞,将参数化的SQL语句发送到数据库
- CallableStatement stmt = conn.prepareCall(String sql);
执行SQL中的存储过程
2.进行事务的管理
进行多个操作,必须保证多个操作在同一事务管理下
- setAutoCommit(boolean autoCommit):设置事务是否自动提交
- commit():事务提交
- rollback():事务回滚
3.Statement
1.执行SQL语句
- boolean execute(String sql):执行select语句返回true,否则返回false
- ResultSet executeQuery(String sql):执行SQL中的select语句
- int executeUpdate(String sql):执行SQL中的select语句
2.执行批处理操作
- addBatch(String sql):添加到批处理操作
- executeBatch():执行批处理操作
- clearBatch():清空批处理操作
4.ResultSet(结果集)
对查询语句(select)查询的结果的封装
主要方法
- next():移动光标到下一行,最开始光标指向第一行之前,用来判断结果集内部还有数据没
- 根据不同类型的数据可以使用getXXX()获取数据
- 通用的获取数据的方法getObject()
5.资源的释放
-
JDBC程序运行完后,切记要释放在运行过程中,创建的那些与数据库进行交互的对象,通常是ResultSet,Statement,Connection。
-
特别是Connection对象,它是非常稀有的资源,这个连接对象有最大的访问个数,用完之后必须马上释放,如果不及时、正确的关闭,极易导致系统崩塌。
-
Connection对象的使用原则是尽量晚创建、早释放。
下面是一个标准释放资源的代码
package com.imooc.jdbc.demo1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.junit.Test; import com.mysql.jdbc.Driver; public class JDBCDemo1 { @Test /** * JDBC资源的释放 */ public void demo2(){ Connection conn = null; Statement stmt = null; ResultSet rs = null; try { // 1.加载驱动 // DriverManager.registerDriver(new Driver());// 会导致驱动注册两次。 Class.forName("com.mysql.jdbc.Driver"); // 2.获得连接 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest", "root", "abc"); // 3.创建执行SQL语句的对象,并且执行SQL // 3.1创建执行sql的对象 String sql = "select * from user"; stmt = conn.createStatement(); // 3.2执行sql rs = stmt.executeQuery(sql); while(rs.next()){ int uid = rs.getInt("uid"); String username = rs.getString("username"); String password = rs.getString("password"); String name = rs.getString("name"); System.out.println(uid+" "+username+" "+password+" "+name); } } catch (Exception e) { e.printStackTrace(); }finally{ // 4.释放资源,无论有没有异常,都会执行释放资源的代码,这一段可以封装为一个方法 if (rs != null) { try { rs.close(); } catch (SQLException sqlEx) { // ignore } rs = null; } if(stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } stmt = null; } if(conn != null){ try { conn.close();//程序不认识这个对象 } catch (SQLException e) { e.printStackTrace(); } conn = null;// 垃圾回收机制更早回收对象 } } }