JDBC-Util工具类
根据前面的代码,当我们要对数据库进行大量的操作时,会产生非常多的重复代码。而且不利于后续的修改操作,因此我们可以写一个jdbc的工具类,让它从配置文件中读取配置参数,然后创建连接对象。
properties
properties配置文件是一种用于存储应用程序配置信息的文本文件。通过properties配置文件,可以使程序的配置信息与程序逻辑代码分离,便于维护和修改。
- 文件名:通常以“.properties”为后缀名。
- 内容格式:由一系列键值对组成,每个键值对表示一个配置项,键值对之间使用等号“=”分隔。例如,“database.url=jdbc:mysql://localhost:3306/mydb”表示一个数据库连接的配置项。
创建一个db.properties文件,里面填入关于数据库的四大参数:
driverClass = com.mysql.jdbc.Driver
jdbcUrl = jdbc:mysql://localhost:3306/esa?useSSL=false
username = root
password = 123456
jdk有一个对应的类import java.util.Properties;是Map接口实现类,key和value都是String。
读取一个properties文件,解析数据,变成key/value结构,存储到properties对象
getClassLoader()获取类加载器
Properties props = new Properties();
props.load(jdbcUtil.class.getClassLoader().getResourceAsStream("db.properties"));
获取properties文件里的value值可以使用:
props.getProperty("Key值");
util工具类
在调用方法的时候直接加载驱动类,所以卸载静态代码块中:
//加载数据库的四大参数static {try{props.load(jdbcUtil.class.getClassLoader().getResourceAsStream("db.properties"));Class.forName(props.getProperty("driverClass"));} catch (ClassNotFoundException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}
在执行增删查改时自动获取连接对象。
public static Connection getConnect() throws SQLException {String jdbcUrl = props.getProperty("jdbcUrl");String username = props.getProperty("username");String password = props.getProperty("password");return DriverManager.getConnection(jdbcUrl, username, password);}
接下来是增删查改的方法:
//执行增删查的方法public static int executeUpdate(String sql,Object... params){try {conn = getConnect();stmt = conn.prepareStatement(sql);//给问号赋值for(int i = 0;i < params.length;i++){stmt.setObject(i+1,params[i]);}//执行return stmt.executeUpdate();} catch (SQLException e) {throw new RuntimeException(e);}finally {close(null);}}
//查询方法,返回结果集public static ResultSet executeQuery(String sql,Object... params) throws SQLException {Connection conn = null;PreparedStatement pstmt = null;conn = getConnect();pstmt = conn.prepareStatement(sql);for(int i = 0;i < params.length;i++){pstmt.setObject(i+1,params[i]);}ResultSet resultSet = pstmt.executeQuery();return resultSet;}
最后关闭连接对象:
public static void close(ResultSet rs){try{if(rs != null) rs.close();if(stmt != null) stmt.close();if(conn != null) conn.close();} catch (SQLException e) {throw new RuntimeException(e);}}
测试
//查询测试String sql = "select * from demo";try {ResultSet rs = jdbcUtil.executeQuery(sql);while (rs.next()){String name = rs.getString("name");String kecheng = rs.getString("kecheng");String fenshu = rs.getString("fenshu");System.out.println(name+" "+kecheng+" "+fenshu);}} catch (SQLException e) {throw new RuntimeException(e);}
String sql = "insert into demo(name,kecheng,fenshu) values('小红','java','88')";int i = jdbcUtil.executeUpdate(sql);System.out.println("共改变了"+i+"行数据");
再次执行查询: