运用配置文件数据更新数据
右键src新建配置文件,在配置文件中配置key和value如图所示:
在Java中编写properties测试类,用于测试配置文件是否正确
mport java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/*
* 读取配置文件
* 通过properties类操作配置文件
*/
public class TestProperties {
public static void main(String[] args) throws Exception {
Properties prop=new Properties();
InputStream is=TestProperties.class.getClassLoader().getResourceAsStream("db.properties");
/*
* load()通过输入流读取配置文件,将配置文件
* 以key-value的方式保存到prop对象中
* 作用:加载配合文件中的数据到prop对象中
*/
prop.load(is);
//获取key为url的值
String url=prop.getProperty("url");
System.out.println(url);
}
}
为了方便以后书写,编写JDBC工具类,里面包含方法,在以后的程序编写中可以很好的调用,减少代码的重用率
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/*
* JDBC 工具类
* JDBC中重复操作
* 加载驱动
* 创建链接
* 关闭链接
*/
public class JdbcUtil {
//构造方法私有,是为了防止外界改变属值
private JdbcUtil(){}
private static String driverName=null;
private static String url=null;
private static String userName=null;
private static String password=null;
static{
try {
Properties prop=new Properties();
//加载配置文件,配置文件一般放在src下
prop.load(JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties"));
driverName=prop.getProperty("driverName");
url=prop.getProperty("url");
userName=prop.getProperty("userName");
password=prop.getProperty("password");
Class.forName(driverName);
} catch (IOException e) {
e.printStackTrace();
/*
* 此处抛出异常是为了让调用者知道发生了异常,程序终止,修改代码
* 此处抛出一个运行时异常,也可以抛出一个检查事异常
* 但是这样就要求抛出的异常做出处理,代码也就不那么简介了
* 同时,若本类实现了某个接口,那么在重写方法时,方法上能
* 不能按此方法抛出一个检查时异常,要看接口中有没有抛出一样的异常(子类异常不能比父类异常大)
* 运行时异常不存在这个问题
*/
throw new RuntimeException(e);
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
//创建链接
public static Connection getConnection() throws SQLException{
Connection conn=DriverManager.getConnection(url, userName, password);
return conn;
}
/*
* 释放资源,关闭链接
* 需要关闭的资源,按照顺序是 ResultSet,Statement,Connection
*/
public static void close (ResultSet rs, Statement stmt,Connection conn){
//一旦第一个出现异常,则后面两个会无法关闭,要捕获后使用finally
//下面为经典代码,应该记住
try {
if(rs!=null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}finally{
try {
if(stmt!=null){
stmt.close();
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}finally{
try {
if (conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
}
}
编写测试
public class EmpDaoTest {
public static void findAll(){
String sql="select * from emp";
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try {
conn=JdbcUtil.getConnection();
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
while(rs.next()){
int empno=rs.getInt("empno");
String ename=rs.getString("ename");
//java.sql.date是Java.Util.date的子类
Date date=rs.getDate("hiredate");
double sal=rs.getDouble("sal");
int deptno=rs.getInt("sal");
System.out.println(empno+"\t"+ename+"\t"+date+"\t"+sal+"\t"+deptno);
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}finally{
JdbcUtil.close(rs, stmt, conn);
}
}
public static void main(String[] args) {
findAll();
}
}