使用JDBC连接数据库的时候有许多的代码是固定的,重复写也没有更大的意义,所以将其制作成一个工具类使用是非常合适的
一、JDBCUtils
public class JDBCUtils {
private static Connection conn;
private static String driver;
private static String url;
private static String user;
private static String password;
// 由于连接数据库只需要一次,我们可以将连接部分放在静态代码块(static{})中
// 为了程序的可扩展性,我们采用读取配置文件的形式连接数据库
static {
try {
//读取配置文件信息
readConfig();
// 注册驱动
Class.forName(driver);
// 获取数据库连接对象
conn = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
throw new RuntimeException("数据库连接失败");
}
}
private static void readConfig() throws IOException {
// 创建Properties集合
Properties prop = new Properties();
// 输入流关联文件
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("db.properties");
// 将文件加载到集合
prop.load(is);
driver = prop.getProperty("driver");
url = prop.getProperty("url");
user = prop.getProperty("user");
password = prop.getProperty("password");
}
// 构造函数私有化
private JDBCUtils() {
}
// 对外提供一个静态方法获取Connection连接对象
public static Connection getConnection() {
return conn;
}
// 关闭资源
public static void close(Connection conn, Statement stat) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stat != null) {
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//重载close方法
public static void close(Connection conn, Statement stat, ResultSet rs) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stat != null) {
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
二、配置文件
文件建议放在src目录下,文件名自取(建议英文),后缀名 .properties
配置信息以键值对的形式存储,中间用 "=" 隔开,示例如下:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb
user=root
password=123
三、测试类及运行效果
public class Test {
public static void main(String[] args) throws SQLException {
//获取数据库连接对象
Connection conn = JDBCUtils.getConnection();
//获取执行SQL语句的执行者
PreparedStatement ps = conn.prepareStatement("select * from student");
//执行SQL语句,获取结果集
ResultSet rs = ps.executeQuery();
while(rs.next()){
int id = rs.getInt("sno");
String name = rs.getString("sname");
int age = rs.getInt("sage");
System.out.println(id+"\t"+name+"\t"+age);
}
//释放资源
JDBCUtils.close(conn, ps, rs);
}
}
运行效果