JDBC详解
Posted wyb666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC详解相关的知识,希望对你有一定的参考价值。
内容:
1、JDBC介绍
2、JDBC入门
3、JDBC工具类
4、JDBC增删改查实例
5、预处理对象
6、JDBC连接池
7、DBUtils使用
8、JDBC事务
1、JDBC介绍
(1)基本概念介绍
什么是JDBC:
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API。
JDBC是Java访问数据库的标准规范,可以为不同的关系型数据库提供统一访问,由一组用Java语言编写的接口(大部分)和类组成
什么是数据库驱动:
JDBC需要连接驱动,驱动是两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,
设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信。eg:mysql的驱动为mysql-connector-java-5.1.37-bin.jar
(2)JDBC与数据库驱动
JDBC与数据库驱动的关系:接口与实现的关系
Java提供访问数据库规范称为JDBC,而生产厂商提供规范的实现类称为驱动
JDBC是接口,驱动是接口的实现,没有驱动将无法完成数据库连接,从而不能操作数据库!
每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生成厂商提供。
JDBC规范(掌握四个核心对象):
- DriverManager:用于注册驱动
- Connection: 表示与数据库创建的连接
- Statement: 操作数据库sql语句的对象
- ResultSet: 结果集或一张虚拟表
2、JDBC入门
(1)导入驱动jar包
创建lib目录,用于存放当前项目需要的所有jar包
选择jar包,右键执行build path / Add to Build Path
(2)JDBC开发步骤
- 注册驱动
- 获得连接
- 获得执行sql语句的对象
- 执行sql语句,并返回结果
- 处理结果
- 释放资源
(3)案例实现
1 @Test 2 // 查询所有的分类信息 3 public void JDBCdemo() throws Exception{ 4 // 注意:使用JDBC规范,采用都是 java.sql包下的内容 5 //1 注册驱动 6 Class.forName("com.mysql.jdbc.Driver"); 7 //2 获得连接 8 String url = "jdbc:mysql://localhost:3306/mydb"; 9 Connection conn = DriverManager.getConnection(url, "root", "root"); 10 //3获得执行sql语句的对象 11 Statement stmt = conn.createStatement(); 12 //4执行SQL语句 13 ResultSet rs = stmt.executeQuery("select * from category"); 14 //5处理结果集 15 while(rs.next()){ 16 // 获得一行数据 17 Integer cid = rs.getInt("cid"); 18 String cname = rs.getString("cname"); 19 System.out.println(cid + " , " + cname); 20 } 21 //6释放资源 22 rs.close(); 23 stmt.close(); 24 conn.close(); 25 }
(4)API详解
注册驱动:
DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 注:不建议使用这个来注册驱动
原因有2个:
- >导致驱动被注册2次。
- >强烈依赖数据库的驱动jar
解决办法:
Class.forName("com.mysql.jdbc.Driver"); =》推荐使用这个来注册驱动
获得链接:
public static Connection getConnection(String url, String user, String password) =》试图建立到给定数据库URL的连接
参数说明:url 需要连接数据库的位置(网址) user用户名 password 密码
例如:getConnection("jdbc:mysql://localhost:3306/day06", "root", "root");
URL:SUN公司与数据库厂商之间的一种协议,eg:jdbc:mysql://localhost:3306/day06 (协议 子协议 IP : 端口号 数据库)
java.sql.Connection接口:
接口的实现在数据库驱动中。所有与数据库交互都是基于连接对象的。
Statement createStatement(); //创建操作sql语句的对象
java.sql.Statement接口:操作sql语句,返回相应结果
String sql = "某SQL语句";
获取Statement语句执行平台:Statement stmt = con.createStatement();
常用方法:
- int executeUpdate(String sql); --执行insert update delete语句.
- ResultSet executeQuery(String sql); --执行select语句.
- boolean execute(String sql); --仅当执行select并且有结果时才返回true,执行其他的语句返回false.
处理结果集(注:执行insert、update、delete无需处理):
ResultSet实际上就是一张二维的表格,我们可以调用其boolean next()方法指向某行记录,当第一次调用next()方法时,
便指向第一行,这时就可以使用ResultSet提供的getXXX(int col)方法来获取指定列的数据:
- rs.next();//指向第一行
- rs.getInt(1);//获取第一行第一列的数据
常用方法:
- Object getObject(int index) / Object getObject(String name) 获得任意对象
- String getString(int index)/ String getString(String name) 获得字符串
- int getInt(int index)/int getInt(String name) 获得整形
- double getDouble(int index)/ double getDouble(String name) 获得双精度浮点型
释放资源:
与IO流一样,使用后的东西都需要关闭!关闭的顺序是先得到的后关闭,后得到的先关闭。
3、JDBC工具类
“获得数据库连接”操作,将在以后的增删改查所有功能中都存在,可以封装工具类JDBCUtils。提供获取连接对象的
方法,从而达到代码的重复利用。该工具类提供方法:public static Connection getConn ()。代码如下:
1 public class JdbcUtils { 2 3 private static String driver = "com.mysql.jdbc.Driver"; 4 private static String url = "jdbc:mysql://localhost:3306/test"; 5 private static String user = "root"; 6 private static String password = "root"; 7 8 static{ 9 try { 10 //注册驱动 11 Class.forName(driver); 12 } catch (Exception e) { 13 throw new RuntimeException(e); 14 } 15 16 } 17 18 /** 19 * 获得连接 20 * @return 21 * @throws SQLException 22 */ 23 public static Connection getConnection() throws SQLException{ 24 //获得连接 25 Connection conn = DriverManager.getConnection(url, user, password); 26 return conn; 27 } 28 29 /** 30 * 释放资源 31 * @param conn 32 * @param st 33 * @param rs 34 */ 35 public static void closeResource(Connection conn , Statement st , ResultSet rs){ 36 37 if(rs != null){ 38 try { 39 rs.close(); 40 } catch (SQLException e) { 41 } 42 } 43 44 if(st != null){ 45 try { 46 st.close(); 47 } catch (SQLException e) { 48 } 49 } 50 51 if(conn != null){ 52 try { 53 conn.close(); 54 } catch (SQLException e) { 55 } 56 } 57 58 }
4、JDBC增删改查实例
以上是关于JDBC详解的主要内容,如果未能解决你的问题,请参考以下文章