根据前面的代码,当我们要对数据库进行大量的操作时,会产生非常多的重复代码。而且不利于后续的修改操作,因此我们可以写一个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+"行数据");
再次执行查询: