JDBC工具类 & 配置文件


今天介绍一下jdbc工具类的正确写法和相关配置文件的使用。

先看源码示例:

package Practise;
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;
/**
 * 标准jdbc工具类的写法:
 * @author 曹
 *
 */
public class JdbcUtilTrue {


  //数据库驱动
  private static String driverClass;
  //具体数据库的相关路径
  private static String url;
  //连接数据库的用户名
  private static String name;
  //连接数据库的密码:  
  private static String password;
  
  static {
    Properties prop = new Properties();
    //InputStream in = new FileInputStream("");这个一般情况下用于读取磁盘的文件
    //以下这个一般用于读取项目中的文件:常用
    InputStream in = JdbcUtilTrue.class.getClassLoader().getResourceAsStream("jdbc.properties");
    try {
      prop.load(in);
      driverClass = prop.getProperty("driverClass");
      url = prop.getProperty("url");
      name = prop.getProperty("name");
      password = prop.getProperty("password");
      try {
        Class.forName(driverClass);
      } catch (ClassNotFoundException e) {
        e.printStackTrace();
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  /**
   * 创建连接并且获取连接
   * @return:返回一个数据库连接对象
   */
  public static Connection getConn() {
    Connection conn=null;
    try {
      conn=DriverManager.getConnection(url, name, password);
    } catch (SQLException e) {
      e.printStackTrace();
    }
    return conn;
  }
  /**
   * 关闭数据库连接资源
   * @param conn:连接对象
   * @param st:数据传输集
   * @param rs:数据结果集
   */
  public static void close(Connection conn, Statement st, ResultSet rs) {
    if(conn!=null) {
      try {
        conn.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }else {
      conn=null;
    }
    if(st!=null) {
      try {
        st.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }else {
      st=null;
    }
    if(rs!=null) {
      try {
        rs.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }else {
      rs=null;
    }
  }
  /**
   * 关闭数据库连接资源
   * @param conn:连接对象
   * @param st:数据传输集
   */
  public static void close(Connection conn, Statement st) {
    if(conn!=null) {
      try {
        conn.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }else {
      conn=null;
    }
    if(st!=null) {
      try {
        st.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }else {
      st=null;
    }
  }
}


源码剖析:

  • 我们不会再像以前那样,将什么classdriver,url,user,password的值提前声明出来,这是一个不好的习惯,因为当你以后要换其他类型的数据库的时候,你需要去源码中修改,麻烦,不提倡。所以,我们直接将值写在了配置文件中,以后修改的时候直接去配置文件中。

  • 在静态代码块中取值并为变量赋值,并且加载驱动(当然这一步高版本可以省略了)

  • 上述代码中有这么两句代码:

    分析如下:

    1.注释部分通常是用来加载磁盘里面的文件,但是也可以加载项目中的文件,当加载项目中的文件时,需要写上完整的绝对路径,比较繁琐。

    2.非注释通常读取的是项目中的文件,只需要填写文件的名称即可,不需要具体的绝对路径。

    JdbcUtilTrue.class

    是通过反射技术获得Class对象,当然了,这个对象本质上是运行jvm的时候实现的,因此,这个Class对象包含了当前类的所有信息。

    JdbcUtilTrue.class.getClassLoader()

    通过Class对象获得当前类加载器,说到类加载器,有四类,分别是bootstrapClassLoader,extensionsClassLoader,applicationClassLoader,customClassLoader,前三者都属于系统的类加载器,后者是用户自定义类加载器。

    JdbcUtilTrue.class.getClassLoader().getResourceAsStream("jdbc.properties")

        

        通过类加载器获得当前项目下的配置文件。

/**
   * 关闭数据库连接资源
   * @param conn:连接对象
   * @param st:数据传输集
   * @param rs:数据结果集
   */
  public static void close(Connection conn, Statement st, ResultSet rs) {
    if(conn!=null) {
      try {
        conn.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }else {
      conn=null;
    }
    if(st!=null) {
      try {
        st.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }else {
      st=null;
    }
    if(rs!=null) {
      try {
        rs.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }else {
      rs=null;
    }
  }
  /**
   * 关闭数据库连接资源
   * @param conn:连接对象
   * @param st:数据传输集
   */
  public static void close(Connection conn, Statement st) {
    if(conn!=null) {
      try {
        conn.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }else {
      conn=null;
    }
    if(st!=null) {
      try {
        st.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }else {
      st=null;
    }
  }

当然了,以上就是资源的关闭代码了,是两段,使用了重载,因为有些资源用不上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值