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;

 public class JDBCUtils {
     private static Connection con;
     private static String driver;
     private static String url;
     private static String username;
     private static String password;

     static {// 静态代码块只执行一次,获取一次信息即可
         try {
             readConfig();
             Class.forName(driver);
             con = DriverManager.getConnection(url, username, password);
         } catch (Exception ex) {
             throw new RuntimeException("数据库连接失败");
         }
     }
 /*
  * getClassLoader();返回该类的加载器
  * getResourceAsStream();查找具有给定名称的资源
  */
     private static void readConfig() {
         InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("JDBC.properties");
         Properties pro = new Properties();
         try {
             pro.load(in);
         } catch (IOException e) {
             e.printStackTrace();
         }
         driver = pro.getProperty("driver");
         url = pro.getProperty("url");
         username = pro.getProperty("username");
         password = pro.getProperty("password");
     }

     public static Connection getConnection() {
         return con;
     }
     public static void close(Connection con, Statement stat) {

         if (stat != null) {
             try {
                 stat.close();
             } catch (SQLException e) {
                 e.printStackTrace();
                 System.out.println("stat流关闭异常!");
             }
         }

         if (con != null) {
             try {
                 con.close();
             } catch (SQLException e) {
                 e.printStackTrace();
                 System.out.println("con流关闭异常!");
             }
         }

     }

     public static void close(Connection con, Statement stat, ResultSet rs) {
         if (rs != null) {
             try {
                 rs.close();
             } catch (SQLException e) {
                 e.printStackTrace();
                 System.out.println("rs流关闭异常!");
             }
         }

         if (stat != null) {
             try {
                 stat.close();
             } catch (SQLException e) {
                 e.printStackTrace();
                 System.out.println("stat流关闭异常!");
             }
         }

         if (con != null) {
             try {
                 con.close();
             } catch (SQLException e) {
                 e.printStackTrace();
                 System.out.println("con流关闭异常!");
             }
         }

 }
 }
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Test {
    public static void main(String[] args) {

        ResultSet rs = null;
        PreparedStatement pst = null;

        Connection con = JDBCUtils.getConnection();
        try {
            pst = con.prepareStatement("SELECT sname,studentno FROM student");
            rs = pst.executeQuery();
            while (rs.next()) {
                System.out.println(rs.getString("sname") + "   "
                        + rs.getString("studentno"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        JDBCUtils.close(con, pst, rs);
    }
}

配置文件:

这样在以后更换数据库后,只需更改配置文件即可,不用再修改程序里面的内容。

利用Properties类,读取配置文件中的信息,通过键获取值。

类加载器getClassLoader()负责读取 Java 字节代码,因为在实际情况下,用户得到的项目没有sre文件夹,只能在bin目录下读取文件。

自定义JDBC工具类(配置文件)的更多相关文章

  1. 自定义JDBC工具类

    因为数据库的连接代码都是固定的,为了将减少重复的代码的书写,可以将这些代码封装为一个工具类,获取数据库的连接对象. import java.sql.Connection; import java.sq ...

  2. 开源JDBC工具类DbUtils

    本篇将会详细地介绍Apache公司的JDBC帮助工具类DbUtils以及如何使用.在上一篇中我们已经通过将以前对dao层使用JDBC操作数据库的冗余代码进行了简易封装形成自己的简单工具类JdbcUti ...

  3. jdbc工具类1.0

    package cn.zhouzhou; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManag ...

  4. 自己实现的JDBC工具类

    最近做了个后台应用程序,刚开始用Spring+iBatis来做的,后来因为种种原因,不让用Spring.iBatis以及一些开源的工具包.   于是用JDBC重写了原来的Service实现,项目做完了 ...

  5. JDBC工具类连接数据库,模仿登录

    ## 使用JDBC工具类的原因在使用JDBC连接数据库的时候,加载驱动.获取连接.释放资源等代码是重复的,所有为了提高代码的复用性,我们可以写一个工具类,将数据库驱动加载.获取连接.资源释放的代码封装 ...

  6. JDBC-select练习&jdbc工具类&数据库登录案例

    一.select练习 1.说明 练习: * 定义一个方法,查询emp表的数据将其封装为对象,然后装载集合,返回. 1. 定义Emp类 2. 定义方法 public List<Emp> fi ...

  7. JDBC基础:JDBC快速入门,JDBC工具类,SQL注入攻击,JDBC管理事务

    JDBC基础 重难点梳理 一.JDBC快速入门 1.jdbc的概念 JDBC(Java DataBase Connectivity:java数据库连接)是一种用于执行SQL语句的Java API,可以 ...

  8. MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  9. MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

随机推荐

  1. Hibernate自动执行更新方法

    问题场景:在执行查询时,没有对对象A调用save或者update操作,控制台显示却执行过一次update 问题原因:在执行查询之前 对A中的某一个关联对象 one-one one-many 等 字段 ...

  2. Spark流式编程介绍 - 编程模型

    来源Spark官方文档 http://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#programm ...

  3. 《Java 8 in Action》Chapter 5:使用流

    流让你从外部迭代转向内部迭代,for循环显示迭代不用再写了,流内部管理对集合数据的迭代.这种处理数据的方式很有用,因为你让Stream API管理如何处理数据.这样Stream API就可以在背后进行 ...

  4. 使用Mybatis-Generator 自动生成代码

    前提:已经有SpringBoot的工程,且在上面实现了MyBatis的应用,只不过全是以手动方式创建mapper.xml映射文件.pojo类等. 在POM中添加MyBatis.generator依赖 ...

  5. NDK Cmake

    CMake与NDK搭配使用时,可以配置的部分变量: 1. `ANDROID_PLATFORM`:指定Android的目标版本,对应`$NDK/platforms/`目录下的版本.通常情况下是`defa ...

  6. c++ 按位或

    |=是位操作运算符的一种,其形式为:a|=b代表的含义为a=a|b;即把a和b做按位或(|)操作,结果赋值给a.按位或的计算规则为:1 逐位进行计算:2 计算数的同位上值,如果均为0,则结果对应位上值 ...

  7. Java多线程之线程的互斥处理

    Java多线程之线程的互斥处理 一.前言 多线程程序中的各个线程都是自由运行的,所以它们有时就会同时操作同一个实例.这在某些情况下会引发问题.例如,从银行账户取款时,余额确认部分的代码应该是像下面这样 ...

  8. 可以穿梭时空的实时计算框架——Flink对时间的处理

    Flink对于流处理架构的意义十分重要,Kafka让消息具有了持久化的能力,而处理数据,甚至穿越时间的能力都要靠Flink来完成. 在Streaming-大数据的未来一文中我们知道,对于流式处理最重要 ...

  9. 朋友聚会,下馆子要到哪家饭馆?——单样本T检验帮你找到答案

      聚会时,五花八门的饭馆让人眼花缭乱,应该到哪家店吃呢?除了美味的食物,良好的服务态度也是好饭馆的必备品质,如何判断一家饭馆的服务态度如何?此时可以用单样本T检验来找答案~ 让顾客对A饭馆的服务态度 ...

  10. 一本通 P1486 【黑暗城堡】

    题库 :一本通 题号 :1486 题目 :黑暗城堡 link :http://ybt.ssoier.cn:8088/problem_show.php?pid=1486 思路 :这道题既然要求使加入生成 ...