[Java] 纯文本查看 复制代码
[/b][/size]
[size=3][b]JDBCUtils 工具类
/**
* 抽取工具类
* 需要抽取的
* 注册驱动
* 抽取的获取连接的方法
*/
public class JDBCUtils {//所以工具类的方法都是静态的方便调用
/**
* 不想传参(麻烦) 但还要有通用性
* 使用配置文件的形式来解决
* 文件的读取只需要读取一次就可以了,不然每次调用该工具类每次都会做无用的读取
* 所以使用静态代码块
*/
//设置静态是为了让下面的静态代码块读到
private static String url;
private static String user;
private static String password;
private static String driver;[/b][/size]
[p=30, 2, left][size=3][b] //静态代码块
static {
Properties pro = new Properties();
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
try {
pro.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//把从配置文件中读取到的信息赋值给三个成员变量
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("driver");[/b][/size][/p][p=30, 2, left][size=3][b] //注册驱动(也想做成通用的)
try {[/b][/size][/p][p=30, 2, left][size=3][b] Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取连接*
* @return conn连接对象
*/
public static Connection geConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
/**
* 释放资源*
* @param conn
* @param state
*/
public static void close(PreparedStatement state, Connection conn) {
if (state != null) {
try {
state.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//不可以写在同一个try里面,防止state出现异常导致conn无法执行;
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 释放资源 重载加上ResultSet 结果集*
* @param conn
* @param state
*/
public static void close(ResultSet rs, PreparedStatement state, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (state != null) {
try {
state.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}[/b][/size][/p][p=30, 2, left][size=3][b]测试类:[/b][/size][/p][p=30, 2, left][size=3][b]//测试工具类
public class UtilsTest {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//调用工具类方法 可以替换注册和连接的步骤
conn = JDBCUtils.geConnection();
String sql = "SELECT * FROM emp WHERE gender = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setObject(1, "男");
rs = pstmt.executeQuery();[/b][/size][/p][p=30, 2, left][size=3][b] while (rs.next()) {
Object id = rs.getObject("id");
Object name = rs.getObject("name");
Object salary = rs.getObject("salary");
Object join_date = rs.getObject("join_date");
Object dept_id = rs.getObject("dept_id");
System.out.println(id + "---" + name + "---" + salary + "---" + join_date + "---" + dept_id);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
//关闭更便捷
JDBCUtils.close(rs, pstmt, conn);
}
}
}[/b][/size][/p]
[size=3][b]