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 }
何事都只需坚持..
难?
维熟尔。
LZL的自学历程...只需坚持