抽取JDBC工具类:JDBCUtils
目的:简化书写
分析:
驱动注册,连接对象创建,其中包括输入驱动,数据库的地址,以及用户名和密码,每次编写代码都需要重复编写,如果每次使用的都是同一个账户的同一个数据库,代码的重复读很高,甚至如果sql语句相同,或者都是查询语句时,会创建的statement对象,而对象的销毁程序也是一模一样。面对这样高度重复的代码,我们需要对其进行封装。像数据库信息这种可能会变更的信息,我们可以写一个数据库的配置文件,当用户的数据库信息不变时,直接使用其中的信息即可,如果有变更,直接更改配置文件,再进行数据读写。
实现:
package demo02.homework; import java.io.FileReader; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLDecoder; import java.sql.*; import java.util.Properties; public class JdbcUtils { private static String url = null; private static String user = null; private static String password = null; private static String driver = null; // 使用静态方法,保持全局调用 static { // 获取包所在文件夹的数据库配置文件 ClassLoader classLoader = JdbcUtils.class.getClassLoader(); // getResource内的数据库配置文件路径最好写绝对路径 URL resource = classLoader.getResource("demo02/homework/jdbc.properties"); String path = resource.getPath(); try { // 如果数据库配置文件路径有中文,会显示乱码,需要进行解码 path = URLDecoder.decode(path, "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } // 创建获取配置信息对象 Properties prop = new Properties(); try { // 加载数据库配置文件 prop.load(new FileReader(path)); } catch (IOException e) { e.printStackTrace(); } // 获取数据库配置文件对应的信息 url = prop.getProperty("url"); user = prop.getProperty("user"); password = prop.getProperty("password"); driver = prop.getProperty("driver"); try { Class.forName(driver); } catch (ClassNotFoundException e) { e.printStackTrace(); } } // 创建连接对象 public static Connection getConnection() { try { return DriverManager.getConnection(url, user, password); } catch (SQLException e) { e.printStackTrace(); return null; } } // 关闭对象方法,这里进行了重载,接收不同的对象 public static void close(Connection conn, Statement stat){ if(stat!=null){ try { stat.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void close(Connection conn, Statement stat, ResultSet rs){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(stat!=null){ try { stat.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }