首页 > 开发 > 综合 > 正文

JDBC

2024-07-21 02:53:09
字体:
来源:转载
供稿:网友
概念: java data source Connectivity  数据连接        JDBC 开发步骤          1 注册驱动            2 获得连接                    3 创建执行sql语句            4 释放资        代码实现:                    抽取工具类:package com.itheima.jdbc.utils; import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.PRoperties; /** * JDBC的工具类 * @author apple * */public class JDBCUtils {   public static final String DRIVERCLASS;   public static final String URL;   public static final String USERNAME;   public static final String PASSWord;     static{          // 获得属性文件中的数据.          Properties properties = new Properties();          try {                 properties.load(new FileInputStream("src/db.properties"));          } catch (FileNotFoundException e) {                 e.printStackTrace();          } catch (IOException e) {                 e.printStackTrace();          }                   DRIVERCLASS = properties.getProperty("jdbc.driverClass");          URL = properties.getProperty("jdbc.url");          USERNAME = properties.getProperty("jdbc.username");          PASSWORD = properties.getProperty("jdbc.password");   }     // 加载驱动:   public static void loadDriver(){          try {                 Class.forName(DRIVERCLASS);          } catch (ClassNotFoundException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();          }   }     // 获得连接:   public static Connection getConnection(){          loadDriver();          Connection conn = null;          try {                 conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);          } catch (SQLException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();          }          return conn;   }     // 释放资源:   public static void release(Statement stmt,Connection conn){          if(stmt != null){                 try {                        stmt.close();                 } catch (SQLException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                 }                 stmt = null;          }                   if(conn != null){                 try {                        conn.close();                 } catch (SQLException e) {                        e.printStackTrace();                 }                 conn = null;          }   }     public static void release(ResultSet rs,Statement stmt,Connection conn){          if(rs!= null){                 try {                        rs.close();                 } catch (SQLException e) {                        e.printStackTrace();                 }                 rs = null;          }          if(stmt != null){                 try {                        stmt.close();                 } catch (SQLException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                 }                 stmt = null;          }                   if(conn != null){                 try {                        conn.close();                 } catch (SQLException e) {                        e.printStackTrace();                 }                 conn = null;          }   }}        连接池 Connection对象在JDBC使用的时候.使用的时候就会去创建一个对象,使用结束以后就会将这个对象给销毁了.每次创建和销毁对象都是耗时操作.需要使用连接池对其进行优化.程序初始化的时候,初始化多个连接,将多个连接放入到池中(内存中).每次获取的时候,都可以直接从连接池中进行获取.使用结束以后,将连接归还到池中.修改类的方法:                                               1  继承                        2 装饰者模式                                            * 装饰者模式的使用条件:                                            * 2.1增强的类和被增强的类实现相同的接口.                                            * 2.2在增强的类中能够获得被增强的类的引用.                                            * 接口中方法过多,只增强其中的一个方法.其他方法都需要原样调用原有方法.                         3 动态修改                                            * JDK的动态代理使用条件:                                             * 被代理的对象必须实现接口. DBCP:         @Test   /**    * DBCP的一个入门:手动设置参数    */   public void demo1(){          Connection conn = null;          PreparedStatement pstmt = null;                   // 创建连接池:          BasicDataSource dataSource = new BasicDataSource();          dataSource.setDriverClassName("com.MySQL.jdbc.Driver");          dataSource.setUrl("jdbc:mysql:///web07");          dataSource.setUsername("root");          dataSource.setPassword("1234");          try{                 // 获得连接:                 conn = dataSource.getConnection();                 // 编写SQL语句.                 String sql = "insert into category values (null,?)";                 // 预编译SQL:                 pstmt = conn.prepareStatement(sql);                 // 设置参数:                 pstmt.setString(1, "鞋靴箱包");                 //执行SQL                 pstmt.executeUpdate();          }catch(Exception e){                 e.printStackTrace();          }finally{                 JDBCUtils.release(pstmt, conn);          }   }    @Test   /**    * DBCP的带有配置文件的方式    */   public void demo2(){          Connection conn = null;          PreparedStatement pstmt = null;                   // 创建连接池:          try{                 Properties properties = new Properties();                 properties.load(new FileInputStream("src/dbcp.properties"));                 DataSource dataSource = BasicDataSourceFactory.createDataSource(properties);                 // 获得连接:                 conn = dataSource.getConnection();                 // 编写SQL语句.                 String sql = "insert into category values (null,?)";                 // 预编译SQL:                 pstmt = conn.prepareStatement(sql);                 // 设置参数:                 pstmt.setString(1, "生活用品");                 //执行SQL                 pstmt.executeUpdate();          }catch(Exception e){                 e.printStackTrace();          }finally{                 JDBCUtils.release(pstmt, conn);          }   } DBCP的参数的设置:#连接设置driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/jdbcusername=rootpassword=1234 #<!-- 初始化连接 -->initialSize=10 #最大连接数量maxActive=50 #<!-- 最大空闲连接 -->maxIdle=20 #<!-- 最小空闲连接 -->minIdle=5 #<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->maxWait=60000c3p0:        代码实现:   @Test   /**    * 手动设置参数的方式:    */   public void demo1(){          Connection conn = null;          PreparedStatement stmt = null;          // System.err.println("");          try{                 // 创建连接池:                 ComboPooledDataSource dataSource = new ComboPooledDataSource();                 // 设置参数:                 dataSource.setDriverClass("com.mysql.jdbc.Driver");                 dataSource.setJdbcUrl("jdbc:mysql:///web07");                 dataSource.setUser("root");                 dataSource.setPassword("1234");                                 conn = dataSource.getConnection();//               编写SQL                 String sql = "insert into category values (null,?)";                 // 预编译SQL:                 stmt = conn.prepareStatement(sql);                 // 设置参数:                 stmt.setString(1, "食品饮料");                 stmt.executeUpdate();          }catch(Exception e){                 e.printStackTrace();          }finally{                 JDBCUtils.release(stmt, conn);          }   }    @Test   /**    * 配置文件的方式:    */   public void demo2(){          Connection conn = null;          PreparedStatement stmt = null;          // System.err.println("");          try{                 // 创建连接池:                 ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql11111");                                 conn = dataSource.getConnection();//               编写SQL                 String sql = "insert into category values (null,?)";                 // 预编译SQL:                 stmt = conn.prepareStatement(sql);                 // 设置参数:                 stmt.setString(1, "食品饮料222");                 stmt.executeUpdate();          }catch(Exception e){                 e.printStackTrace();          }finally{                 JDBCUtils.release(stmt, conn);          }   }【使用C3P0改写了工具类】public class JDBCUtils2 {     private static final ComboPooledDataSource DATASOURCE =new ComboPooledDataSource();     public Connection getConnection(){          Connection conn = null;          try {                 conn = DATASOURCE.getConnection();          } catch (SQLException e) {                 e.printStackTrace();          }          return conn;   }     ...}DBUtilsDBUtils【概述】DBUtils是java编程中的数据库操作实用工具,小巧简单实用。DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。Dbutils三个核心功能介绍l  QueryRunner中提供对sql语句操作的API.l  ResultSetHandler接口,用于定义select操作后,怎样封装结果集.l  DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法 【QueryRunner核心类】l  QueryRunner(DataSource ds) ,提供数据源(连接池),DBUtils底层自动维护连接connectionl  update(String sql, Object... params) ,执行更新数据l  query(String sql, ResultSetHandler<T> rsh, Object... params) ,执行查询 【ResultSetHandler结果集处理类】
ArrayHandler将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
ArrayListHandler将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。
BeanHandler将结果集中第一条记录封装到一个指定的javaBean中。
BeanListHandler将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
ColumnListHandler将结果集中指定的列的字段值,封装到一个List集合中
KeyedHandler将结果集中每一条记录封装到Map<String,Object>,在将这个map集合做为另一个Map的value,另一个Map集合的key是指定的字段的值。
MapHandler将结果集中第一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值 
MapListHandler将结果集中每一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值,在将这些Map封装到List集合中。
ScalarHandler它是用于单数据。例如select count(*) from 表操作。
 【DbUtils】closeQuietly(Connection conn) 关闭连接,如果有异常try后不抛。commitAndCloseQuietly(Connection conn) 提交并关闭连接rollbackAndCloseQuietly(Connection conn) 回滚并关闭连接
上一篇:Android SQLite使用

下一篇:mysq入门l练习题

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表