zoukankan      html  css  js  c++  java
  • 自行封装JDBC工具类

    将JDBC冗余的代码进行封装,此处的冗余特指每次操作数据库必然建立连接和关闭流操作!代码注释很详细,此处不过多解释,直接进入代码部分:

     1 package edu.aeon.jdbc;
     2 import java.io.IOException;
     3 import java.sql.Connection;
     4 import java.sql.DriverManager;
     5 import java.sql.PreparedStatement;
     6 import java.sql.SQLException;
     7 import java.util.Properties;
     8 /**
     9  * 类作用:该类用于封装jdbc对数据库(打开、关流)操作!
    10  * @author lzj
    11  * @create 2017年11月15日 下午5:53:43
    12  */
    13 public class JdbcUtil {
    14     static Properties prs=null;
    15     //加载资源文件处理类、只加载一次、且最先要加载到内存堆中
    16     /*
    17      * static{}(静态代码块)与{}(非静态代码块)的异同点
    18         相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,
    19                  一般在代码块中对一些static变量进行赋值。
    20         不同点:静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。
    21                      静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new
    22                  一次就执行一次。非静态代码块可在普通方法中定义(不过作用不大);而静态代码块不行。*/
    23     static {
    24         prs=new Properties();
    25         try {
    26             //加载数据库配置文件,如果加载xml,可用loadXML()
    27             prs.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("database.properties"));
    28         } catch (IOException e) {
    29             e.printStackTrace();
    30         }
    31     }
    32     /**
    33      * @describe 用于建立与mysql数据库之间的连接
    34      * @create at 2017年11月15日 下午6:51:35 by lzj
    35      * @Parameters1 无
    36      * @Returns Connection 数据库连接对象
    37      */
    38     public static Connection getMysqlConnection(){
    39         try {
    40             //注册mysql驱动类
    41             Class.forName(prs.getProperty("mysql.driver"));
    42             //将根据所传入url,用户名,密码所建立的mysql数据库连接对象返回
    43             return DriverManager.getConnection(
    44                     prs.getProperty("mysql.url"),
    45                     prs.getProperty("mysql.username"),
    46                     prs.getProperty("mysql.password"));
    47         } catch (ClassNotFoundException e) {
    48             e.printStackTrace();
    49             System.out.println("加载mysql驱动类时出错!");
    50             return null;
    51         } catch (SQLException e) {
    52             e.printStackTrace();
    53             System.out.println("建立数据库连接时出错!");
    54             return null;
    55         }
    56     }
    57     /**
    58      * @descibe 该静态方法用于关闭对数据库的流操作!(可重载)
    59      * 此处为了简单演示只写了一个关闭类,实际开发中该类重载很多次!
    60      * @create at 2017年11月15日 下午6:54:45 by lzj
    61      * @Parameters1 ps 数据库操作对象 、预编译
    62      * @Parameters2 conn 数据库连接对象
    63      * @Returns void
    64      */
    65     public static void closeResource(PreparedStatement ps,Connection conn){
    66         try {
    67             if(ps!=null) {
    68                 ps.close();
    69             }
    70         } catch (Exception e) {
    71             e.printStackTrace();
    72             System.out.println("ps流关闭异常!");
    73         }
    74         try {
    75             if(conn!=null) {
    76                 conn.close();
    77             }
    78         } catch (Exception e) {
    79             e.printStackTrace();
    80             System.out.println("conn流关闭异常!");
    81         }
    82     }
    83 }

    配置文件database.properties:

     1 ####################[mysql]####################
     2 mysql.driver = com.mysql.jdbc.Driver
     3 mysql.url = jdbc:mysql://localhost:3306/student
     4 mysql.username = root
     5 mysql.password = lzj_aeon+
     6 ####################[oracle]####################
     7 oracle.driver = 
     8 oracle.url = 
     9 oracle.username = 
    10 oracle.userpw = 

    封装好了之后我们写个测试类:

     1 package edu.aeon.jdbc;
     2 
     3 import java.sql.Connection;
     4 import java.sql.PreparedStatement;
     5 import java.sql.SQLException;
     6 
     7 /**
     8  * @author lzj
     9  * @create 2017年11月15日 下午6:40:39
    10  * @describe
    11  */
    12 public class Test {
    13 
    14     /**
    15      * at 2017年11月15日 下午6:40:39 by lzj
    16      * @Parameters1 String[] args
    17      * @Returns void
    18      */
    19     public static void main(String[] args) throws SQLException {
    20         Connection conn = JdbcUtil.getMysqlConnection();
    21         PreparedStatement ps=null;
    22         String sql="insert into student (id,name) values (?,?)";
    23         try {
    24             ps = conn.prepareStatement(sql);
    25             ps.setInt(1, 666);
    26             ps.setString(2, "lzj");
    27             ps.execute();
    28             System.out.println("数据插入成功!");
    29         } catch (SQLException e) {
    30             e.printStackTrace();
    31             conn.rollback();
    32             System.out.println("数据插入失败!");
    33         }finally {
    34             JdbcUtil.closeResource(ps, conn);
    35         }
    36     }
    37 }

    测试结果截图:

    数据库相应信息截图:

    为了方便大家共同学习,源码已打包上传至我的网盘:http://pan.baidu.com/s/1eS8LhAE 密码:z60x

      

    如有任何疑问可联系邮箱: 给我发邮件、或直接联系QQ:1584875179 || 点返回首页

  • 相关阅读:
    分布式缓存HttpRuntime.cache应用到单点登陆中_优化登陆
    ID Codes
    Smith Numbers经典
    青蛙的约会
    exp_euler两种形式int,void(扩展欧几里得算法)可求最大公约数,二元一次方程的解
    A/B
    Raising Modulo Numbers
    Brave balloonists 求素因子的个数
    排列
    Anagram
  • 原文地址:https://www.cnblogs.com/aeon/p/7840614.html
Copyright © 2011-2022 走看看