【0 员工类:Employee.java】由于工具类中有使用
package com.flying.jdbc;
public class Employee {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
package com.flying.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcUtils {
// 数据库驱动只需要加载一次
// static静态代码块在类加载的时候会执行,并且只执行一次
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
// 对外提供获取连接的方法
// 异常可以直接抛出,因为在调用该方法处还会执行try-catch.
public static Connection getConnection() throws SQLException {
String url = "jdbc.mysql://127.0.0.1:3306/jdbcDemo?characterEncoding=utf-8";
String user = "root";
String password = "root";
Connection con = DriverManager.getConnection(url, user, password);
return con;
}
//释放资源方法2 其他增删改释放资源
public static void release(Connection con, Statement st) {
//注意:释放资源是有先后顺序的
if (st != null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//释放资源方法1 查询的时候释放资源
public static void release(Connection con, Statement st, ResultSet res) {
//注意:释放资源是有先后顺序的
if (res!=null) {
try {
res.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (st !=null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
注意:在释放资源的时候,如果没有使用到ResultSet结果集,那么也可以使用:
JdbcUtils.release(con, st, null);
但是这样写不符合编程规范,并且如果在其他人调用该方法的时候,就会对于方法中为什么要传递一个null存在疑惑,因此可以编写一个重载的方法来进行区分。
【2 工具类的测试类UtilstDemoTest.java】
package com.flying.jdbc;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
public class UtilstDemoTest {
@Test
public void chaxun(){
Connection con = null;
Statement st = null;
ResultSet res = null;
try {
con=JdbcUtils.getConnection();
String sql = "select * from employee";
st = con.createStatement();
res = st.executeQuery(sql);
List list = new ArrayList();
//处理结果集
while (res.next()) {
Employee emp = new Employee();
emp.setId(res.getInt(1));
emp.setName(res.getString(2));
emp.setAge(res.getInt(3));
//以下3句注释和上边的3句代码结果一样
//emp.setId(res.getInt("id"));
//emp.setName(res.getString("name"));
//emp.setAge(res.getInt("age"));
list.add(emp);
}
System.out.println(list);
} catch (SQLException e) {
e.printStackTrace();
}finally{
//调用工具类中的3个参数的释放资源的方式
JdbcUtils.release(con, st, res);
}
}
}