JDBC使用类路径读取jdbc配置文件

JDBC使用类路径读取jdbc配置文件

时间:20180314


优化jdbc的JdbcUtil类

代码实现在JdbcUtil类中使用类路径读取jdbc配置文件

//jdbc配置文件--jdbc.properties
url=jdbc:mysql://localhost:3306/day16
user=root
password=root
driverClass=com.mysql.jdbc.Driver
jdbc.properties文件结构目录
//JdbcUtil.java
/**
 * jdbc通用方法
 * @author mengjie
 *
 */
public class JdbcUtil {
    //url
    //private static String url = "null";错误写法,读取jdbc.properties文件中数据无法覆盖
    private static String url = null;
    //user 
    //private static String user  = "null"; static静态写法,只初始化一次
    private static String user  = null;
    //password
    //private static String password = "null";static静态写法,只初始化一次
    private static String password = null;
    //driveClass驱动程序类 
    //private static String driverClass = "null";static静态写法,只初始化一次
    private static String driverClass = null;
    /**
     *z只注册一次驱动,静态代码块 
     */
    static {
        //注册驱动程序
        try {
            /**
             * 读取jdbc.properties文件
             */
            //1) 创建Properties
            Properties prop = new Properties();
            
            //构造输入流
            /**
             * 相对路径: . 这个代表当前目录。当前目录本质上是java命令运行的目录
             * java项目中:eclipse中,当前目录指向项目的跟目录
             * web项目中:当前目录只想%tomcat%/bin目录
             * 结论:
             * 1).在web项目中不能使用相对路径
             * 2).不能使用ServletContext读取文件(Java项目中无法使用,web项目可行)
             * 3).使用类路径的方式读取配置文件
             *      3.1获取类的对象
             *          Class clazz = 当前项目的类.class
             *      
             *      3.2调用类的路径方法
             *          clazz.getResourceAsStream("/配置文件")
             *          这个斜杠代表类路径的根目录
             */
            //1)获取类的对象(使用当前类)
            Class clazz = JdbcUtil.class;
            //2)使用类路径的读取方法去读取文件
            /**
             * 这个斜杠:代表项目类路径的根目录。
             * 什么是类路径:查找类的目录/路径
             *      java项目下:类路径的根目录,指向项目的bin目录
             *      Web项目下:类路径的跟目录,指向WEB-INF/classes目录下
             * 只要把配置文件放在src目录的根目录下,那么这些文件就自动拷贝到项目的类路径跟目录下
             */
            InputStream in = clazz.getResourceAsStream("/jdbc.properties");
            
            //InputStream in = new FileInputStream("./src/jdbc.properties");
            //2) 加载文件
            prop.load(in);
            //3) 读取文件内容
            url = prop.getProperty("url");
            user = prop.getProperty("user");
            password = prop.getProperty("password");
            driverClass = prop.getProperty("driverClass");
            
            System.out.println("url: "+url+" user: "+user+" password: "+password+" driverClass: "+driverClass);
            
            Class.forName(driverClass);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 获取连接的方法
     * @throws SQLException 
     */
    public static Connection getConnection() {
        try {
            Connection conn = DriverManager.getConnection(url, user, password);
            return conn;
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    /**
     * 释放资源的方法
     */
    public static void close(Statement stmt, Connection conn) {
        if(stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
        
        if(conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
    }
    
    /**
     * 释放资源的方法
     */
    public static void close(ResultSet rs, Statement stmt, Connection conn) {
        if(rs!=null) {
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        if(stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
        
        if(conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
    }
}
//测试demo
public class Demo2 {
    private static Connection conn = null;
    private static Statement stmt = null;
    private static ResultSet res = null;
    public static void main(String[] args) throws Exception {
                String username = "rose";
                String password = "123456";
        conn = JdbcUtil.getConnection();
        stmt = conn.createStatement();
        String sql = "SELECT * FROM user_list WHERE NAME =' "+username+" ' AND PASSWORD=' "+password+" '";
        res = stmt.executeQuery(sql);
        if(res.next()) {
            System.out.println("登陆成功");
        }else {
            System.out.println("登陆失败");
        }
    }
}

总结

  1. jdbc是什么?
      使用java程序操作数据库的技术。(就是一套接口)
  2. jdbc操作数据库步骤:
      2.1注册驱动
       Class.forName(驱动名称)
      2.2获取连接
       Connection conn = DriverManager.getConnection(url,user,password);
      2.3创建Statement/PreparedeStatement/CallableStatement
       Statement stmt = conn.getStatement();
       PreparedStatement stmt = conn.PreparedStatement(sql);
    2.4如果使用PreparedeStatement/CallableStatement,设置参数
      stmt.setXXX(参数位置, 参数值);
    2.5执行sql/发送参数
      stmt.executeUpdate() DDL+DML
      ResultSet res = stmt.executeQuery() ; DQL
    2.6处理结果集
      res.next()
      res.get()
    2.7关闭资源
      res.close();
      stmt.close();
      conn.close();
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JDBC简介 SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC。JDBC...
    奋斗的老王阅读 5,416评论 0 51
  • 本节介绍Statement接口及其子类PreparedStatement和CallableStatement。 它...
    zlb阅读 4,892评论 0 0
  • 本文内容 1.什么是JDBC以及为什么要使用JDBC 2.JDBC核心API的讲解 3.使用JDBC核心API进行...
    Vincilovfang阅读 5,000评论 0 11
  • 本人的环境为Myeclipse10、MySQL5.7.15 本文包括:简介JDBC编程步骤打通数据库程序详解—Dr...
    廖少少阅读 9,586评论 7 39
  • 离开的时候,泥土绵软 布谷的喉头灌满春天的酒 听笛的时候,梅花未开,梨花先落 风吹帘动,老牛的睫毛跟着闪动 抬头的...
    四夕山人阅读 1,378评论 0 1