zoukankan      html  css  js  c++  java
  • JDBC和数据库连接池

    JDBC简述

    JDBC(Java DataBase Connectivity,java数据库连接)
    是Java访问数据库的标准规范
    是由各大数据库厂商来实现对应接口

    JDBC简单使用

     1 import java.sql.Connection;
     2 import java.sql.DriverManager;
     3 import java.sql.SQLException;
     4 import java.sql.Statement;
     6 public class Demo01_jdbc入门程序 {
     8      public static void main(String[] args) {
    10         Connection conn = null;
    11         Statement st = null;
    12         try {
    13             //1 加载驱动
    14             Class.forName("com.mysql.jdbc.Driver");
    16             //2 获得连接
    17             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db0814","root","123");
    19             //3创建通道
    20             st = conn.createStatement();
    22             String sql = "insert into student values(null,'李四',21,'1998-10-10')";
    24             //4执行sql
    25             int result = st.executeUpdate(sql);  // 5.处理结果集  ,返回值表示数据库中受影响的数据的条数
    26             System.out.println(result);
    27             //6关闭资源
    28             st.close();
    29             conn.close();   
    31         } catch (Exception e) {
    32             e.printStackTrace();
    33         }finally{    
    51         }
    53     }
    55 }

    JDBC预通道

     1 import com.offcn.util.DateUtil;
     2 import com.offcn.util.JDBCUtil;
     3 public class Demo01_PreparedStatement使用 {
     4     /*
     5      * PreparedStatement是Statement的子接口
     6      * 
     7      * Statement的缺点:
     8      *   1 拼接SQL过于繁琐
     9      *   2 多条相似SQL 会每条SQL都进行编译,效率低
    10      *   3 SQL注入攻击问题
    11 
    12      * PreparedStatement:
    13      *    1 不用拼接SQL 而是用? 占位,绑定参数的方式
    14      *    2 预编译功能,相似操作只编译一次,提高效率
    15      *    3 防止SQL注入攻击问题
    16      * 
    17      * */
    18     public void test2(){
    19         Connection conn = null;
    20         PreparedStatement ps = null;
    21         try{
    22             conn = JDBCUtil.getConnection();
    23             String sql = "insert into student values(null,?,?,?)";
    24             ps = conn.prepareStatement(sql);  // 这里就把sql进行了预编译,把sql编译成一个可执行的函数   例如: MYINSERT(?,?,?)
    26             ps.setObject(1, name);
    27             ps.setObject(2, Integer.parseInt(age));
    28             ps.setObject(3, DateUtil.stringToDate(birthday));
    29             
    30             int result1 = ps.executeUpdate();
    31             
    32             ps.setObject(1, name2);
    33             ps.setObject(2, Integer.parseInt(age2));
    34             ps.setObject(3, DateUtil.stringToDate(birthday2));
    35             
    36             int result2 = ps.executeUpdate();
    37             
    38             System.out.println(result1+"	"+result2);
    40         }catch(Exception e){
    41             e.printStackTrace();
    42         }finally{
    43             JDBCUtil.closeAll(null, ps, conn);
    44         }    
    45     }

    连接池简述

    原始:
            创建连接
            使用连接
            销毁连接
    连接池:
            创建连接池
            取用连接
            归还连接

    官方定义接口 DataSource 由厂商去实现

      DBCP连接池、C3p0连接池、Druid连接池(阿里)

        DBCP连接池和c3p0连接池的对比:

        Dbcp:效率高,但是安全性一般   Apache软件基金会  

        C3p0:安全性很高,效率偏低

    C3P0连接池

     1   import java.sql.Connection;
     2   import java.sql.PreparedStatement;
     3   import java.sql.ResultSet;
     4   
     5   import javax.sql.DataSource;
     6   import com.mchange.v2.c3p0.ComboPooledDataSource;
     7   import com.offcn.util.C3P0Util;
     8   
     9   public class Demo01_C3P0使用 {
    10      public static void main(String[] args) throws Exception{
    11          DataSource ds = new ComboPooledDataSource();  //默认加载src下的 c3p0-config.xml中的<default-config>的配置
    12          DataSource ds = new ComboPooledDataSource("offcn");//加载src下c3p0-config.xml中  <named-config name="offcn">的配置
    14          Connection conn = ds.getConnection();
    15          
    16          PreparedStatement ps = conn.prepareStatement("select * from student");
    17          ResultSet rs = ps.executeQuery();
    18          while(rs.next()){
    19             System.out.println(rs.getInt("id")+"	"+rs.getString("name")+"	"+rs.getInt("age")+"	"+rs.getDate("birthday"));
    20          }
    22          rs.close();
    23          ps.close();
    24          conn.close();
    25      }
    26 
    27  }

    C3P0Util

     1 import java.sql.Connection;
     3 import javax.sql.DataSource;
     5 import com.mchange.v2.c3p0.ComboPooledDataSource;
     7 public class C3P0Util { 
    10     private static DataSource ds; 
    12     static{  
    14         ds = new ComboPooledDataSource();
    15     }
    18     public static DataSource getDataSource(){
    19         return ds;
    22     public static Connection getConnection() throws Exception{
    23         return ds.getConnection();
    24     }
    26 }

    DBUtils工具

      DBUtils是java编程中的数据库操作实用工具,小巧简单实用。
      DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写很多代码
      Dbutils三个核心功能介绍     QueryRunner中提供对sql语句操作的API.(CRUD增删改查)     ResultSetHandler接口,用于定义select操作后,怎样封装结果集.     DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法(事务)
      数据更新    update(String sql,Object…param)   数据查询   query(String sql,handler,Object[] param)
      ResultSetHandler结果集处理程序    BeanHandler    将结果集中第一条记录封装到一个指定的javaBean中。    BeanListHandler 将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中    MapListHandler 将结果集中每一条记录封装到了Map
    <String,Object>集合中,key就是字段名称,value就是字段值,在将这些Map封装到List集合中。

    数据库事务

    四大特性(ACID)
       原子性(Atomicity)    事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
      一致性(Consistency)    事务前后数据的完整性必须保持一致
      隔离性(Isolation)    是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个 并发事务之间数据要相互隔离,不能相互影响。
      持久性(Durability)    指一个事务一旦被提交(commit),它对数据库中数据的改变就是永久性的,接下来即使数据库发 生故障也不应该对其有任何影响
    我凝视这恒星,等待这那场风暴,我已经准备好了
  • 相关阅读:
    20135313_exp4
    20135313_exp5
    学习分块
    学习BM算法
    学习笛卡尔树
    【数学】Eddy Walker
    【bitset】Kth Minimum Clique
    【搜索】n的约数
    【搜索】Partition problem
    【信息学奥赛一本通 提高组】第四章 广搜的优化技巧
  • 原文地址:https://www.cnblogs.com/cheng5350/p/11466490.html
Copyright © 2011-2022 走看看