封装DBUtil工具类简化JDBC操作

本文介绍了一个Java数据库操作工具类DBUtil,该类提供了一系列方法用于连接数据库、执行SQL语句、处理结果集和关闭资源。通过示例展示了如何使用DBUtil进行用户数据的增加和查询操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DBUtil.java代码如下:

package cn.zhangzhilin.util;

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 DBUtil {
	final static String URL = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf-8";
	final static String USERNAME = "root";
	final static String PWD = "123456";
	public static Connection connection = null;
	public static PreparedStatement pstmt = null;
	public static ResultSet resultSet = null;
	
	//获取链接
	public static Connection getConnection() throws ClassNotFoundException, SQLException {
		Class.forName("com.mysql.cj.jdbc.Driver");
		connection = DriverManager.getConnection(URL, USERNAME, PWD);
		return connection;
	}
	
	//参数赋值
	public static PreparedStatement creatPreparedStatement(String sql,Object[] params) throws SQLException, ClassNotFoundException {
		pstmt = getConnection().prepareStatement(sql);
		if (params!=null) {
			for (int i = 0; i < params.length; i++) {
				pstmt.setObject(i+1, params[i]);
			}
		}
		return pstmt;
	}
	
	//增删改
	public static boolean executeUpdate(String sql,Object[] params) {
		try {
			getConnection();
			pstmt = creatPreparedStatement(sql,params);
			int count = pstmt.executeUpdate();
			if (count>0) {
				return true;
			}else {
				return false;
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			return false;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} finally {
			closeAll(resultSet, pstmt, connection);
		}
	}
	
	//查询
	public static ResultSet executeQuery(String sql,Object[] params) {
		try {
			getConnection();
			pstmt = creatPreparedStatement(sql,params);
			resultSet = pstmt.executeQuery();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return resultSet;
	}
	
	//关闭连接
	public static void closeAll(ResultSet resultSet,Statement stmt,Connection connection) {
		try {
			if (resultSet != null) resultSet.close();
			if (stmt != null) stmt.close();
			if (connection != null) connection.close();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	//获取总数
	public static int getTotalCount(String sql,Object[] params) {
		int count = -1;
		try {
			pstmt = creatPreparedStatement(sql, params);
			resultSet = pstmt.executeQuery();
			if(resultSet.next()) {
				count = resultSet.getInt(1);
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch ( SQLException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			closeAll(resultSet, pstmt, connection);
		}
		return count;
	}
	
	
}

使用案例

增加用户

public boolean addUser(User user) {
		System.out.println(user);
		String sql = "insert into user VALUES (?,?,?,?)";
		//DBUtil的executeUpdate(String sql,Object[] params)方法返回boolean标识是否执行成功。
		return DBUtil.executeUpdate(sql, new Object[] {user.getId(),user.getNickname(),user.getUsername(),user.getPassword()});
	}

查询用户

public boolean queryUser(User user) {
		String sql = "select * from user where user_name=? and user_password=?";
		//DBUtil的executeQuery(String sql,Object[] params)方法返回resultSet对象,只需要对resultSet对象做相应处理即可。
		ResultSet resultSet = DBUtil.executeQuery(sql, new Object[] {user.getUsername(),user.getPassword()});
		 try {
			if (resultSet.next()) {
				 return true;
			}else {
				return false;
			}
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} finally {
			//调用DBUtil的静态方法closeAll(ResultSet resultSet,Statement stmt,Connection connection)关闭连接。
			DBUtil.closeAll(resultSet, DBUtil.pstmt,  DBUtil.connection);
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值