首先自己封装了一个JDBCUtil类,里面包括加载驱动、获取连接、以及关闭资源
其中加载驱动写到了静态代码块里面,这样不同的程序使用这个类的时候能保证静态代码块只执行一次。构造函数设置成私有的,其他方法都设置成为静态的,使用类名.方法去调用,在调用的时候静态代码块就会执行。
package com.cj.jdbc.Util;
import java.sql.*;
import java.util.ResourceBundle;
public class JDBCUtil {
//构造方法设置成私有的,里面的方法都是静态的,防止new出来对象
private JDBCUtil(){}
static { //静态代码块只有在类加载时执行,且执行一次
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//获取连接方法
public static Connection getConnection() throws SQLException {
ResourceBundle bundle = ResourceBundle.getBundle("配置文件");
String url = bundle.getString("url");
String user = bundle.getString("user");
String password = bundle.getString("password");
Connection conn = DriverManager.getConnection(url,user,password);
return conn;
}
//关闭资源方法
public static void Close(Connection conn, Statement stat, ResultSet rs){
if(rs != null){
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(stat != null){
try {
stat.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
哦对,里面用到了ResourceBundle加载配置文件:
url = jdbc:mysql://localhost:3306/chencj?characterEncoding=utf-8&serverTimezone=UTC
user = root
password = 172524
测试类:
package com.cj.jdbc.Util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Text {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null; //使用这个防止SQL注入
ResultSet rs = null;
//调用自已封装的类加载驱动和获取连接
try {
conn = JDBCUtil.getConnection();
//设置事务提交
conn.setAutoCommit(false);
//设置SQL语句
String sql = "select ename from emp where ename like ?";
//获得SQL执行对象
ps = conn.prepareStatement(sql);
//初始化占位符
ps.setString(1,"_A%");
//更新表
rs = ps.executeQuery();
while(rs.next()){
System.out.println(rs.getString("ename"));
}
conn.commit(); //事务提交
} catch (SQLException throwables) {
try {
conn.rollback(); //执行失败就回滚
} catch (SQLException e) {
e.printStackTrace();
}
throwables.printStackTrace();
}finally{
//释放资源
JDBCUtil.Close(conn,ps,rs);
}
}
}
结果: