2.JDBC-02
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.JDBC-02相关的知识,希望对你有一定的参考价值。
常见的配置文件格式:
1.properties
里面内容的格式 key=value
2.xml
若我们的配置文件为properties,并且放在src目录下.
名字存为jdbc.properties
1 driverClass = com.mysql.jdbc.Driver 2 url = jdbc:mysql://localhost:3306/day02 3 user = root 4 password = 123456
我们可以通过 ResourceBundle工具快速获取里面的配置信息
使用步骤:
1.获取ResourceBundle 对象:
static ResourceBundle getBundle("文件名称不带后缀名")
2.通过ResourceBundle 对象获取配置信息
String getString(String key) :通过执行key获取指定的value
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ResourceBundle; public class JdbcUtils01 { static final String DRIVERCLASS; static final String URL; static final String USER; static final String PASSWORD; static{ //静态代码块 //获取ResourceBundle ctrl+2 松手按L //块编辑 alt+shift+a //变大写ctrl+shift+x //变小写ctrl+shift+y //向下复制一行alt+ctrl+下箭头 //向上复制一行alt+ctrl+上箭头 ResourceBundle bundle = ResourceBundle.getBundle("jdbc"); //获取指定内容 DRIVERCLASS = bundle.getString("driverClass"); URL = bundle.getString("url"); USER = bundle.getString("user"); PASSWORD = bundle.getString("password"); } static{ //注册驱动 try { Class.forName(DRIVERCLASS); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USER, PASSWORD); } /** * 释放资源 * @param conn 链接 * @param st 语句执行者 * @param rs 结果集 */ public static void closeResource(Connection conn, Statement st, ResultSet rs) { closeResultSet(rs); closeStatement(st); closeConn(conn); } /** * 释放链接 * @param conn 链接 */ public static void closeConn(Connection conn) { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } conn = null; } } /** * 释放语句执行者 * @param st 语句执行者 */ public static void closeStatement(Statement st) { if (st != null) { try { st.close(); } catch (SQLException e) { e.printStackTrace(); } st = null; } } /** * 释放结果集 * @param rs 结果集 */ public static void closeResultSet(ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } rs = null; } } }
1 //更新操作 2 //@Test 3 public void f4(){ 4 Connection conn = null; 5 ResultSet rs = null; 6 PreparedStatement st = null; 7 8 try { 9 conn = JdbcUtils01.getConnection(); 10 String sql = "update category set cname = ? where cid = ?"; 11 st = conn.prepareStatement(sql); 12 st.setString(1, "手机"); 13 st.setString(2, "c006"); 14 15 int i = st.executeUpdate(); 16 17 if(i==1){ 18 System.out.println("success"); 19 }else{ 20 System.out.println("fail"); 21 } 22 23 } catch (SQLException e) { 24 e.printStackTrace(); 25 }finally{ 26 //释放资源 27 JdbcUtils01.closeResource(conn, st, rs); 28 } 29 } 30 31 //删除操作 32 @Test 33 public void f5(){ 34 Connection conn = null; 35 ResultSet rs = null; 36 PreparedStatement st = null; 37 38 try { 39 conn = JdbcUtils01.getConnection(); 40 String sql = "delete from category where cid = ?"; 41 st = conn.prepareStatement(sql); 42 st.setString(1, "c006"); 43 44 int i = st.executeUpdate(); 45 if(i==1){ 46 System.out.println("success"); 47 }else{ 48 System.out.println("fail"); 49 } 50 } catch (SQLException e) { 51 e.printStackTrace(); 52 }finally{ 53 JdbcUtils01.closeResource(conn, st, rs); 54 } 55 }
案例2-通过连接池(数据源)优化我们的操作.
需求:
使用jdbc的时候,每操作一次都需要获取连接(创建)用完之后把连接释放掉了(销毁),通过连接池来优化curd操作.
连接池概述:
管理数据库的连接,
作用:
提高项目的性能.
就是在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可.
所有的连接池必须实现一个接口 javax.sql.DataSource接口
获取连接方法:
Connection getConnection()
归还连接的方法就是以前的释放资源的方法.调用connection.close();
自定义一个连接池(理解思想)
常用连接池:
DBCP
C3P0
///////////////////
增前方法
1.继承
2.装饰者模式(静态代理)
3.动态代理
//////////////
装饰者模式:★★★
使用步骤:
1.装饰者和被装饰者实现同一个接口或者继承同一个类
2.装饰者中要有被装饰者的引用
3.对需要增强的方法进行加强
4.对不需要加强的方法调用原来方法
////////////////////////////////////
常用的连接池:
DBCP:(理解)
apache组织
使用步骤:
1.导入jar包(commons-dbcp-1.4.jar和commons-pool-1.5.6.jar)
2.使用api
a.硬编码
1 //创建连接池 2 BasicDataSource ds = new BasicDataSource(); 3 4 //配置信息 5 ds.setDriverClassName("com.mysql.jdbc.Driver"); 6 ds.setUrl("jdbc:mysql:///day07"); 7 ds.setUsername("root"); 8 ds.setPassword("1234");
b.配置文件
实现编写一个properties文件
1 //存放配置文件 2 Properties prop = new Properties(); 3 prop.load(new FileInputStream("src/dbcp.properties")); 4 //设置 5 //prop.setProperty("driverClassName", "com.mysql.jdbc.Driver"); 6 //创建连接池 7 DataSource ds = new BasicDataSourceFactory().createDataSource(prop);
C3P0:(★)
hibernate和spring使用
有自动回收空闲连接的功能.
使用步骤:
1.导入jar包(c3p0-0.9.1.2.jar)
2.使用api
a.硬编码(不推荐)
new ComboPooledDataSource()
b.配置文件
配置文件的名称:c3p0.properties 或者 c3p0-config.xml
配置文件的路径:src下
编码只需要一句话
new ComboPooledDataSource()//使用默认的配置
new ComboPooledDataSource(String configName)//使用命名的配置 若配置的名字找不到,使用默认的配置
////////////////////////////
案例3-使用dbutils完成curd操作
技术分析:
dbutils
dbutils:
是apache组织的一个工具类,jdbc的框架,更方便我们使用
使用步骤:
1.导入jar包(commons-dbutils-1.4.jar)
2.创建一个queryrunner类
queryrunner作用:操作sql语句
构造方法:
new QueryRunner(Datasource ds);
3.编写sql
4.执行sql
query(..):执行r操作
update(...):执行cud操作
////////////////////////////
核心类或接口
QueryRunner:类名
作用:操作sql语句
构造器:
new QueryRunner(Datasource ds);
注意:
底层帮我们创建连接,创建语句执行者 ,释放资源.
常用方法:
query(..):
update(..):
DbUtils:释放资源,控制事务 类
closeQuietly(conn):内部处理了异常
commitAndClose(Connection conn):提交事务并释放连接
....
ResultSetHandler:封装结果集 接口
ArrayHandler, ArrayListHandler, BeanHandler, BeanListHandler, ColumnListHandler, KeyedHandler, MapHandler, MapListHandler, ScalarHandler
(了解)ArrayHandler, 将查询结果的第一条记录封装成数组,返回
(了解)ArrayListHandler, 将查询结果的每一条记录封装成数组,将每一个数组放入list中返回
★★BeanHandler, 将查询结果的第一条记录封装成指定的bean对象,返回
★★BeanListHandler, 将查询结果的每一条记录封装成指定的bean对象,将每一个bean对象放入list中 返回.
(了解)ColumnListHandler, 将查询结果的指定一列放入list中返回
(了解)MapHandler, 将查询结果的第一条记录封装成map,字段名作为key,值为value 返回
★MapListHandler, 将查询结果的每一条记录封装map集合,将每一个map集合放入list中返回
★ScalarHandler,针对于聚合函数 例如:count(*) 返回的是一个Long值
以上是关于2.JDBC-02的主要内容,如果未能解决你的问题,请参考以下文章