zoukankan      html  css  js  c++  java
  • 数据库连接JDBC和数据库连接池C3P0自定义的java封装类

    数据库连接JDBC和数据库连接池C3P0自定义的java封装类

    使用以下的包装类都需要自己有JDBC的驱动jar包:

    如 mysql-connector-java-5.1.26-bin.jar(5.1.26代表的是版本序列号)

    一、JDBC的封装:(java连接MySQL)

      1 import java.sql.*;
      2 
      3 import utils.GlobalConstant;
      4 
      5 public class JDBCUtil {
      6 
      7     private JDBCUtil() {
      8 
      9     }
     10 
     11     /**
     12      * 获取JDBC的数据库连接
     13      */
     14     public static Connection getConnection() {
     15         Connection conn = null;
     16         try {
     17             Class.forName(GlobalConstant.CONNECTION_DRIVER);
     18             conn = DriverManager.getConnection(GlobalConstant.CONNECTION_URL, GlobalConstant.CONNECTION_USER,
     19                     GlobalConstant.CONNECTION_PASSWORD);
     20         } catch (Exception e) {
     21             e.printStackTrace();
     22         }
     23         /*
     24          * try { conn = DataSourceService.getConnection(); } catch (SQLException
     25          * e) { e.printStackTrace(); }
     26          */
     27         return conn;
     28     }
     29 
     30     private static void close(ResultSet rs, Statement sm, Connection conn) {
     31         try {
     32             if (rs != null)
     33                 rs.close();
     34             if (sm != null)
     35                 sm.close();
     36             if (conn != null)
     37                 conn.close();
     38         } catch (Exception e) {
     39             e.printStackTrace();
     40         }
     41     }
     42 
     43     /**
     44      * 关闭数据库的结果集
     45      * 
     46      * @param rs
     47      *            需要关闭的结果集
     48      */
     49     public static void close(ResultSet rs) {
     50         try {
     51             if (rs != null)
     52                 rs.close();
     53         } catch (Exception e) {
     54             e.printStackTrace();
     55         }
     56     }
     57 
     58     /**
     59      * 将一个标准的sql查询语句在数据库中查询,并且返回一个对应的结果集。
     60      * 
     61      * @param sql
     62      *            标准的sql查询语句
     63      */
     64     public static ResultSet doQuery(String sql) {
     65         Connection conn = getConnection();
     66         if (conn == null)
     67             return null;
     68         Statement sm = null;
     69         ResultSet rs = null;
     70         try {
     71             sm = conn.createStatement();
     72             rs = sm.executeQuery(sql);
     73             return rs;
     74         } catch (SQLException e) {
     75             e.printStackTrace();
     76         } finally {
     77             if (rs == null && sm != null) {
     78                 close(null, sm, conn);
     79             }
     80             // close(null, sm, conn);这句肯定不行
     81         }
     82         return rs;
     83     }
     84 
     85     /**
     86      * 将一个更新语句和对应的参数进行查询,并返回一个整形结果
     87      * 
     88      * @param sql
     89      *            数据库中的更新语句
     90      * @param paras
     91      *            sql中对应的参数
     92      */
     93     public static int doUpdate(String sql, String[] paras) {
     94         Connection conn = getConnection();
     95         if (conn == null)
     96             return 0;
     97         PreparedStatement psm = null;
     98         int result = 0;
     99         try {
    100             psm = conn.prepareStatement(sql);
    101             for (int i = 0; i < paras.length; i++) {
    102                 psm.setString(i + 1, paras[i]);
    103             }
    104             result = psm.executeUpdate();
    105         } catch (Exception e) {
    106             e.printStackTrace();
    107         } finally {
    108             close(null, psm, conn);
    109         }
    110         return result;
    111     }
    112 }
    JDBCUtils

    以下的C3P0的数据库连接池除了需要以上的JDBC的驱动包,还需以下jar包:

    如 c3p0-0.9.1.2.jar (0.9.1.2代表的是版本序列号)

    为了方便使用,可以用其他的jar包进行辅助封装(dbUtils的jar)

    如 commons-dbutils-1.3.jar (1.3代表的是版本序列号)

    二、C3P0数据库连接池的封装:(java连接MySQL)

    ----------------不需要xml的配置文件

     1 import java.beans.PropertyVetoException;
     2 import java.sql.Connection;
     3 import javax.sql.DataSource;
     4 import com.mchange.v2.c3p0.ComboPooledDataSource;
     5 
     6 import utils.GlobalConstant;
     7 
     8 public class DataSourceUtils {
     9     private static DataSource ds;
    10 
    11     static {
    12         /*
    13          * 从配置文件读取配置信息 <?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <!--
    14          * 默认配置,如果没有指定则使用这个配置 --> <default-config> <property
    15          * name="checkoutTimeout">30000</property> <property
    16          * name="idleConnectionTestPeriod">30</property> <property
    17          * name="initialPoolSize">3</property> <property
    18          * name="maxIdleTime">30</property> <property
    19          * name="maxPoolSize">10</property> <property
    20          * name="minPoolSize">3</property> <property
    21          * name="maxStatements">50</property> <property
    22          * name="acquireIncrement">3</property><!-- 如果池中数据连接不够时一次增长多少个 -->
    23          * <property name="driverClass">com.mysql.jdbc.Driver</property>
    24          * <property name="jdbcUrl">
    25          * <![CDATA[jdbc:mysql://127.0.0.1:3306/project?useUnicode=true&
    26          * characterEncoding=UTF-8]]> </property> <property
    27          * name="user">root</property> <property
    28          * name="password">789123</property> </default-config> </c3p0-config>
    29          * 
    30          * ds = // 默认的读取c3p0-config.xml中默认配置 new ComboPooledDataSource();
    31          */
    32         ComboPooledDataSource cpds = null;
    33         try {
    34             cpds = new ComboPooledDataSource();
    35             cpds.setCheckoutTimeout(30000);
    36             cpds.setIdleConnectionTestPeriod(30);
    37             cpds.setInitialPoolSize(3);
    38             cpds.setMaxIdleTime(30);
    39             cpds.setMaxPoolSize(70);
    40             cpds.setMaxStatementsPerConnection(100);
    41             cpds.setMinPoolSize(3);
    42             cpds.setMaxStatements(75);
    43             cpds.setAcquireIncrement(3);
    44             cpds.setDriverClass(GlobalConstant.CONNECTION_DRIVER);
    45             cpds.setJdbcUrl(GlobalConstant.CONNECTION_URL);
    46             cpds.setUser(GlobalConstant.CONNECTION_USER);
    47             cpds.setPassword(GlobalConstant.CONNECTION_PASSWORD);
    48             ds = cpds;
    49         } catch (PropertyVetoException e) {
    50             System.out.println("与MySQL数据库连接失败!");
    51         }
    52     }
    53 
    54     private DataSourceUtils() {
    55 
    56     }
    57 
    58     public static DataSource getDatasSource() {
    59         return ds;
    60     }
    61 
    62     public static Connection getConnection() {
    63         Connection con = null;
    64         try {
    65             con = ds.getConnection();// 每一次从ds中获取一个新的连接
    66         } catch (Exception e) {
    67             e.printStackTrace();
    68         }
    69         return con;
    70     }
    71 }
    DataSourceUtils

    如果要验证其可用性,你们可以修改下以上的用户名,密码,数据库名

    之后在自己的MySQL建立自己相应的数据库即可测试。

  • 相关阅读:
    如何抓住用户痛点做产品?
    分析需求场景对产品设计的意义
    【用户分析-用户场景】这TM才是产品思维!
    WebUploader实现浏览器端大文件分块上传
    npm 安装包报错 rollbackFailedOptional
    PAT 甲级 1074 Reversing Linked List (25 分)(链表部分逆置,结合使用双端队列和栈,其实使用vector更简单呐)...
    PAT 甲级 1071 Speech Patterns (25 分)(map)
    P3370 【模板】字符串哈希
    PageRank算法原理与Python实现
    PAT-2019年冬季考试-甲级 7-4 Cartesian Tree (30分)(最小堆的中序遍历求层序遍历,递归建树bfs层序)...
  • 原文地址:https://www.cnblogs.com/xiaocao1434/p/4783713.html
Copyright © 2011-2022 走看看