zoukankan      html  css  js  c++  java
  • Java的数据库连接工具类的编写

    Java的数据库连接工具类的编写

    步骤:

    1. 定义变量
    2. 通过反射进行读取配置文件
    3. 实例化Properties读取配置文件中的各个属性
    4. 关闭字节输入流
    5. 类加载
    6. 通过驱动管理的获取连接方法获取到连接对象
    7. 释放资源
    

    代码:

    package cn.javabs.util;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    /**
      * @author: Mryang
      * Jdbc工具类:  工具类的含义是作为一个通用的辅助资料使用,简化开发流程,提高效率。
      *             工具类一般使用“static”进行修饰,静态化
      *                    static的优点
      *                      |---- 1. 可以使用 【类名.函数名称】进行调用,不必再次创建对象
      *                      |---- 2. 优于构造函数先执行
      *                      |---- 4. 静态成员被所有对象所共享(静态数据达到成为共享数据)
      *                      |---- 3. 随着类的加载而加载 (也就是说类运行了,静态成员也就跟随运行了) 
      *                    static的缺点
      *                      |---- 1. 访问出现局限性,只能访问静态
      *                      |---- 2. 静态成员的生命周期过长
      *                      |---- 3. 不可以与thissuper关键字同用
      *                                 |----因为this代表是当前类对象,而静态存在时,有可能没有对象
      *                                 |----因为super代表是父类对象,而静态存在时,有可能没有对象,
      *                                 |----而且静态优先于对象存在
      *                      |----4.静态方法只能访问静态成员, 非静态方法既可以访问静态又可以访问非静态; 
      *                        
      *    
      **/
    public class JdbcUtil {
        
        // 定义 数据库驱动
        private static String driverClass;
        // 定义 数据库的连接
        private static String url;
        // 定义 数据库用户
        private static String user;
        // 定义 数据库用户的密码
        private static String password;
        
        // 静态代码块
        static{
            try {
            //  JdbcUtil.class是获得当前对象所属的class对象 
            //  getClassLoader()是取得该Class对象的类装载器 
            //  getResourceAsStream(“dbcfg.properties”) 调用类加载器的方法加载资源,返回是字节输入流 
                InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("dbcfg.properties");
                // 实例化Properties对象,目的是为了创建props
                Properties props = new Properties();
                // 在props对象中可以进行加载属性列表到Properties类对象
                props.load(in);//也就是说: 通过props对象进行加载输入流对象(in)
               /*
                * 通过getProperty方法用指定的键在此属性列表中搜索属性
                */
                //也就是说: 通过props对象进行获取【dbcfg.properties】中的指定的键-driverClass(被指定)
                driverClass = props.getProperty("driverClass");
                //也就是说: 通过props对象进行获取【dbcfg.properties】中的指定的键-url(被指定)
                url = props.getProperty("url");
                //也就是说: 通过props对象进行获取【dbcfg.properties】中的指定的键-user(被指定)
                user = props.getProperty("user");
                //也就是说: 通过props对象进行获取【dbcfg.properties】中的指定的键-password(被指定)
                password = props.getProperty("password");
                //已经获取过配置文件中的属性键值对,将字节输入流进行释放关闭
                in.close();
            } catch (IOException e) {
                // 转换异常抛出
                throw new ExceptionInInitializerError("获取数据库配置文件信息失败");
            }
            try {
                // 类加载-->驱动
                Class.forName(driverClass);
            } catch (ClassNotFoundException e) {
                // 转换异常抛出
                throw new ExceptionInInitializerError("加载驱动失败");
            }
        }
        
        /**
         * 获取连接
         * @return: conn
         */
        public static Connection getConnection(){
            try {
                //连接类型  连接对象  =  驱动管理中的获取连接(连接,用户名,密码)
                Connection conn = DriverManager.getConnection(url,user,password);
                // 将连接进行返回
                return conn;
            } catch (Exception e) {
                // 转换异常抛出
                throw new RuntimeException("链接数据库的url或用户名密码错误,请检查您的配置文件");
            }
        }
        
        /**
         * 释放资源
         * 传递三个参数: 结果集对象 ,处理Sql语句对象 , 连接对象  
         * 无返回值状态
         */
        public static void release(ResultSet rs,Statement stmt,Connection conn){
            //如果 结果集中不为空
            if(rs!=null){
                try {
                    rs.close();//将结果集中关闭
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                rs = null;
            }
            //如果处理Sql语句对象不为空
            if(stmt!=null){
                try {
                    stmt.close();//将处理Sql语句对象关闭
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                stmt = null;
            }
            //如果 连接不为空
            if(conn!=null){
                try {
                    conn.close();//将连接关闭
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                conn = null;
            }
        }
    }

    配置文件编写 - dbcfg.properties:

    #driver config for mysql
    driverClass=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/test
    user=root
    password=sorry
     

     
    作者: 杨校

    出处:https://www.cnblogs.com/xiaoxiao5016/

    分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。

    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(397583050@qq.com)咨询。

  • 相关阅读:
    Windows Server 2003中不能安装MSN的解决方法
    招新人的一个标准
    SVN源代码服务器 证书通不过时的解决办法
    项目风险控制
    项目与团队管理体会
    季羡林老先生百年为人处世哲学
    李一男2003年在港湾给开发人员培训时的语录
    项目管理中的一些想法
    poj 1236 Network of Schools
    poj 2528 Mayor's posters
  • 原文地址:https://www.cnblogs.com/xiaoxiao5016/p/9407636.html
Copyright © 2011-2022 走看看