黑马程序员技术交流社区

标题: 数据库学习~ [打印本页]

作者: A190103375    时间: 2019-7-14 14:47
标题: 数据库学习~
JDBC工具类

package cn.itcast.utils;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;

/**
* 抽取共性内容, 为了解决重复代码问题
*/
public class JDBCUtils {
    private static String url;
    private static String username;
    private static String password;
    private static String driverClass;

    //注册驱动
    static {// 位置:类中方法外, 特点:只会执行一次, 随着字节码而加载
        try {
            //读取配置文件中的,用户名,密码,url...., 这里用Properties读取更方便,可以和io流结合!!!!load
            Properties pro = new Properties();
            //pro.load(new FileReader("day04/src/mysql.properties"));
            // 不能直接读src下的配置文件, 因为将来给客户的字节码目录, 不是源码目录, 我们应该读字节码目录的配置文件,
            // 这个配置文件放到src下,原因是, 他会帮我们拷贝一份到字节码目录下一份
            // 怎么读字节码目录下的配置文件????? ----> 类加载器,因为他可以加载字节码目录下的所有东西!!!!!!!
            ClassLoader classLoader = JDBCUtils.class.getClassLoader();
            // 使用类加载器去加载配置文件
            String path = classLoader.getResource("mysql.properties").getPath();
           // System.out.println(path);
            pro.load(new FileReader(path));
            url = pro.getProperty("url");
            username = pro.getProperty("username");
            password = pro.getProperty("password");
            driverClass = pro.getProperty("driverClass");
            Class.forName(driverClass);

           // Class.forName("com.mysql.jdbc.Driver");//注册驱动只需要进行一次, 凡是一次性的东西一般情况放在静态代码块中
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //获取连接
    public static Connection getConnection() throws SQLException {
        //不能讲url,username,password写死, 应该从配置文件中读取,读取的动作只需要进行一次,应该放到静态代码块中!!!!!!!
        return DriverManager.getConnection(url, username, password);
    }


    //释放资源
    public static void close(Connection connection, Statement statement, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void close(Connection connection, Statement statement) {
        close(connection, statement, null);

    }

}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2