jdbc java数据库连接 6)类路径读取——JdbcUtil的配置文件

 

之前的代码中,以下代码很多时候并不是固定的:

1     private static String url = "jdbc:mysql://localhost:3306/day1029?useUnicode=true&characterEncoding=GB2312";
2     // 数据库的用户名和密码
3     private static String user = "root";
4     private static String password = "root";
5     Class.forName("com.mysql.jdbc.Driver");    

 

这时候,我们可以在该类的包的src目录下创建一个bd.properties文件,用来存储这些信息:

url=jdbc:mysql://localhost:3306/day17
user=root
password=root
driverClass=com.mysql.jdbc.Driver

 

如果是java项目读取该文件的这些信息的话,可以这样读取:

FileInputStream in = new FileInputStream("./src/db.properties");

但是在Web项目中不能这样读取,因为:

  . 代表java命令运行的目录

* 在java项目下,. java命令的运行目录从项目的根目录开始

* 在web项目下, . java命令的而运行目录从tomcat/bin目录开始

* 所以不能使用点.

  

  那么,我们该如何读取,才能让java和Web项目都能读取呢?

这时候就用到了类路径读取

InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties");

原因:  

  使用类路径的读取方式
* / : 斜杠表示classpath的根目录

* 在java项目下,classpath的根目录从bin目录开始

* 在web项目下,classpath的根目录从WEB-INF/classes目录开始

 

java项目中只要更改:  1)第一个代码块,把它们的值都改为null

           2)增加类路径读取即可。

下面是Web项目的代码:

 

  1)jdbc工具类:

  1 /**
  2  * jdbc工具类
  3  * @author APPle
  4  *
  5  */
  6 public class JdbcUtil {
  7     private static String url = null;
  8     private static String user = null;
  9     private static String password = null;
 10     private static String driverClass = null;
 11     
 12     /**
 13      * 静态代码块中(只加载一次)
 14      */
 15     static{
 16         try {
 17             //读取db.properties文件
 18             Properties props = new Properties();
 19             /**
 20              *  . 代表java命令运行的目录
 21              *  在java项目下,. java命令的运行目录从项目的根目录开始
 22              *  在web项目下,  . java命令的而运行目录从tomcat/bin目录开始
 23              *  所以不能使用点.
 24              */
 25             //FileInputStream in = new FileInputStream("./src/db.properties");
 26             
 27             /**
 28              * 使用类路径的读取方式
 29              *  / : 斜杠表示classpath的根目录
 30              *     在java项目下,classpath的根目录从bin目录开始
 31              *     在web项目下,classpath的根目录从WEB-INF/classes目录开始
 32              */
 33             InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties");
 34             
 35             //加载文件
 36             props.load(in);
 37             //读取信息
 38             url = props.getProperty("url");
 39             user = props.getProperty("user");
 40             password = props.getProperty("password");
 41             driverClass = props.getProperty("driverClass");
 42             
 43             
 44             //注册驱动程序
 45             Class.forName(driverClass);
 46         } catch (Exception e) {
 47             e.printStackTrace();
 48             System.out.println("驱程程序注册出错");
 49         }
 50     }
 51 
 52     /**
 53      * 抽取获取连接对象的方法
 54      */
 55     public static Connection getConnection(){
 56         try {
 57             Connection conn = DriverManager.getConnection(url, user, password);
 58             return conn;
 59         } catch (SQLException e) {
 60             e.printStackTrace();
 61             throw new RuntimeException(e);
 62         }
 63     }
 64     
 65     
 66     /**
 67      * 释放资源的方法
 68      */
 69     public static void close(Connection conn,Statement stmt){
 70         if(stmt!=null){
 71             try {
 72                 stmt.close();
 73             } catch (SQLException e) {
 74                 e.printStackTrace();
 75                 throw new RuntimeException(e);
 76             }
 77         }
 78         if(conn!=null){
 79             try {
 80                 conn.close();
 81             } catch (SQLException e) {
 82                 e.printStackTrace();
 83                 throw new RuntimeException(e);
 84             }
 85         }
 86     }
 87     
 88     public static void close(Connection conn,Statement stmt,ResultSet rs){
 89         if(rs!=null)
 90             try {
 91                 rs.close();
 92             } catch (SQLException e1) {
 93                 e1.printStackTrace();
 94                 throw new RuntimeException(e1);
 95             }
 96         if(stmt!=null){
 97             try {
 98                 stmt.close();
 99             } catch (SQLException e) {
100                 e.printStackTrace();
101                 throw new RuntimeException(e);
102             }
103         }
104         if(conn!=null){
105             try {
106                 conn.close();
107             } catch (SQLException e) {
108                 e.printStackTrace();
109                 throw new RuntimeException(e);
110             }
111         }
112     }
113 }

 

  然后是web登陆连接sql的类:

 1 public class TestPath extends HttpServlet {
 2 
 3     public void doGet(HttpServletRequest request, HttpServletResponse response)
 4             throws ServletException, IOException {
 5         //连接数据库
 6         //获取连接
 7         Connection conn = JdbcUtil.getConnection();
 8         System.out.println(conn);
 9     }
10 
11     public void doPost(HttpServletRequest request, HttpServletResponse response)
12             throws ServletException, IOException {
13         doGet(request, response);
14     }
15 
16 }

 

posted @ 2016-10-30 20:01  卡拉瓦  阅读(7870)  评论(0编辑  收藏  举报