1 import java.io.IOException; 2 import java.io.InputStream; 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 import java.util.Properties; 9 10 public class JDBCUtils { 11 private static Connection con; 12 private static String driver; 13 private static String url; 14 private static String username; 15 private static String password; 16 17 static {// 静态代码块只执行一次,获取一次信息即可 18 try { 19 readConfig(); 20 Class.forName(driver); 21 con = DriverManager.getConnection(url, username, password); 22 } catch (Exception ex) { 23 throw new RuntimeException("数据库连接失败"); 24 } 25 } 26 /* 27 * getClassLoader();返回该类的加载器 28 * getResourceAsStream();查找具有给定名称的资源 29 */ 30 private static void readConfig() { 31 InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("JDBC.properties"); 32 Properties pro = new Properties(); 33 try { 34 pro.load(in); 35 } catch (IOException e) { 36 e.printStackTrace(); 37 } 38 driver = pro.getProperty("driver"); 39 url = pro.getProperty("url"); 40 username = pro.getProperty("username"); 41 password = pro.getProperty("password"); 42 } 43 44 public static Connection getConnection() { 45 return con; 46 } 47 public static void close(Connection con, Statement stat) { 48 49 if (stat != null) { 50 try { 51 stat.close(); 52 } catch (SQLException e) { 53 e.printStackTrace(); 54 System.out.println("stat流关闭异常!"); 55 } 56 } 57 58 if (con != null) { 59 try { 60 con.close(); 61 } catch (SQLException e) { 62 e.printStackTrace(); 63 System.out.println("con流关闭异常!"); 64 } 65 } 66 67 } 68 69 public static void close(Connection con, Statement stat, ResultSet rs) { 70 if (rs != null) { 71 try { 72 rs.close(); 73 } catch (SQLException e) { 74 e.printStackTrace(); 75 System.out.println("rs流关闭异常!"); 76 } 77 } 78 79 if (stat != null) { 80 try { 81 stat.close(); 82 } catch (SQLException e) { 83 e.printStackTrace(); 84 System.out.println("stat流关闭异常!"); 85 } 86 } 87 88 if (con != null) { 89 try { 90 con.close(); 91 } catch (SQLException e) { 92 e.printStackTrace(); 93 System.out.println("con流关闭异常!"); 94 } 95 } 96 97 } 98 }
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目录下读取文件。