jdbc原生连接数据库工具类
在有些项目中,我们需要用到原生的Java技术来编写,这样就会用到jdbc来连接数据库,jdbc的连接步骤就只有加载驱动得到连接等等,我们可以把重复的抽取代码抽取出来,提高效率
下面开始
首先创建一个类,我命名为JdbcUtil.java
第一步就是加载驱动,由于驱动我们只需要加载一次,所以放在静态代码块中
public class JdbcUtil {
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
e.printStackTrace();
}
}
}
接下来就是得到数据库的连接,我放到方法里
public static Connection getConnection() {
Connection conn = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3305/baidu", "root", "123456");
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
接下来就是抽取通用的增删改操作,注意,是增删改,不包括查询,我也是放在方法里
public static int executeUpdateSDU(String sql, Object... objects) {
int rows = -1;//返回受影响行
// 1.加载驱动
// 2.得到数据库连接:Connection指向的接口
Connection conn = null;
// 3.得到Statement:接口指向的对象,使用Statement对象发送sql语句到数据库中执行,返回结果集
PreparedStatement ps = null;
try {
conn = JdbcUtil.getConnection();
ps = conn.prepareStatement(sql);
if (objects!=null) {
for (int i = 0; i < objects.length; i++) {
ps.setObject((i+1), objects[i]);
}
}
rows = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.closeAll(null, ps, conn);
}
return rows;
}
接下来就是关闭资源,传入相应的对象即可,
public static void closeAll(ResultSet rs, Statement 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();
}
}
}
完整代码
JdbcUtil.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcUtil {
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() {
Connection conn = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3305/baidu", "root", "123456");
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
// 查询
public static ResultSet query(String sql){
try {
return getConnection().createStatement().executeQuery(sql);
} catch (SQLException e) {
// e.printStackTrace();
return null;
}
}
/**
* 抽取通用的增删改操作
*
* @param employee
* @return
*/
public static int executeUpdateSDU(String sql, Object... objects) {
int rows = -1;
// 1.加载驱动
// 2.得到数据库连接:Connection指向的接口
Connection conn = null;
// 3.得到Statement:接口指向的对象,使用Statement对象发送sql语句到数据库中执行,返回结果集
PreparedStatement ps = null;
try {
conn = JdbcUtil.getConnection();
ps = conn.prepareStatement(sql);
if (objects!=null) {
for (int i = 0; i < objects.length; i++) {
ps.setObject((i+1), objects[i]);
}
}
rows = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.closeAll(null, ps, conn);
}
return rows;
}
public static void closeAll(ResultSet rs, Statement 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();
}
}
}
}
测试
新建UserDaoImpl.java , 写入方法,根据id删除
public int deleteById(int id) {
//DELETE FROM `user` WHERE id=2
String sqlDele = "DELETE FROM `user` WHERE id=?";
/*参数少可以直接放入方法里,参数很多的话可以用objec装着,要注意顺序*/
return JdbcUtil.executeUpdateSDU(sqlDele, id);
}