jdbc-210323-01

该博客介绍了如何封装JDBC工具类DBUtil,包括数据库连接的获取与释放。同时,讲解了悲观锁的概念,并展示了在SQL查询中使用`for update`实现行级锁的例子,强调了在事务处理中行级锁的作用。

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

jdbc - 210323 - 01

  • 封装JDBC
  • 悲观锁 / 行级锁

封装JDBC

DBUtil
package bgy;
import java.sql.*;
public class DBUtil {
    //当然也可以从资源文件中提取,我这里就写死了

    /*
        工具类中的构造方法都是私有的,,,防止你new它
        工具类类中的方法都是静态的,不需要new对象,直接采用类名调用
     */
    private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
    private static final String URL = "jdbc:mysql://localhost:3306/test?&useSSL=false&serverTimezone=UTC";
    private static final String USER = "root";
    private static final String PASSWORD = "admin";

    private DBUtil(){}

    // 静态代码块在类加载时执行,并且只执行一次
    // 注册驱动
    static {
        try {
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取数据库连接
     * @return Connection
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException {
//        Connection conn = DriverManager.getConnection(URL,USER,PASSWORD);
//        return conn;

        return DriverManager.getConnection(URL,USER,PASSWORD);
    }

    /**
     * 关闭资源
     * @param conn
     * @param stmt
     * @param rs
     */
    public static void close(Connection conn, Statement stmt, ResultSet rs){
        if(rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

测试DBUtil
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Demo01 {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            conn = DBUtil.getConnection();

            String sql = "select * from t_user where loginpwd=?";
            ps = conn.prepareStatement(sql);
            ps.setString(1,"111");

            rs = ps.executeQuery();

            while (rs.next()){
                String loginName = rs.getString("loginname");
                System.out.println(loginName);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(conn,ps,rs);
        }
    }
}

悲观锁 / 行级锁

悲观锁 / 行级锁
	在select后面添加   for update
	
	加上的话在结束运行期间,,,这个参数不能修改
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值