jdbc 数据库操作

这篇博客演示了如何使用 Java 的 JDBC 操作 MySQL 数据库,包括用户实体类的创建、DAO 接口与实现、以及 JUnit 测试。通过在 `pom.xml` 文件中添加依赖,使用 Lombok 插件简化代码,实现了用户插入、更新和删除的功能,并进行了单元测试验证。此外,还讨论了重复代码的封装,创建了一个 JDBC 工具类以提高代码复用性。

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

对这个数据库进行操作

在这里插入图片描述

1,在pom文件dependencies里面配置依赖

		<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
		</dependency>

		<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
            <scope>provided</scope>
        </dependency>

2,编写用户实体类

//这里用lombok插件自动生成每个属性的get和set方法,还有带参和无参函数。引入代码在“1”
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Accessors(chain = true) //链式编程
public class User {
    private int id;
    private String userName;
    private String userPass;
}

3,编写用户接口

public interface UserDao {
	//插入
    void insert(User user) throws Exception;
    //修改
    int update(User user) throws Exception;
    //删除
    int delete(int id) throws Exception;
}

4,实现类

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class UserDaoImpl implements UserDao{
	//创建conection
    private final String url = "jdbc:mysql://localhost:3306/aad?useSSL=false&charactorEncoding=utf8";
    private final String user1 = "root";
    private final String password = "123456";
	//插入
    @Override
    public void insert(User user) throws Exception{
        //加载驱动器类
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection(url,user1,password);
        //创间statement对象
        String sql = "insert into admin(userName,userPass) values(?,?)";
        PreparedStatement pstm = con.prepareStatement(sql);
        //设置参数
        pstm.setString(1, user.getUserName());
        pstm.setString(2,user.getUserPass());
        //执行sql
        int r = pstm.executeUpdate();
        //输出
        System.out.println(r);
        //关闭资源
        pstm.close();
        con.close();
    }
    //修改
    @Override
    public int update(User user) throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection(url,user1,password);
        String sql = "update admin set userName = ?, userPass = ? where id = ?";
        PreparedStatement pstm = con.prepareStatement(sql);
        pstm.setString(1,user.getUserName());
        pstm.setString(2,user.getUserPass());
        pstm.setInt(3,user.getId());
        int r = pstm.executeUpdate();
        pstm.close();
        con.close();
        return r;
    }
    //删除
    @Override
    public int delete(int id) throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection(url,user1,password);
        String sql = "delete from admin where id = ?";
        PreparedStatement pstm = con.prepareStatement(sql);
        pstm.setInt(1,id);
        int r = pstm.executeUpdate();
        return r;
    }
}

5,使用junit测试

①插入测试

import org.junit.Test;

public class UserDaoImplTest {
    //插入测试
    @Test
    public void testInsert() throws Exception{
        User user = new User()
                .setUserName("芜湖")
                .setUserPass("123456");
        UserDao userDao = new UserDaoImpl();
        userDao.insert(user);
    }
}

可以看到成功插入
在这里插入图片描述

②修改测试

//修改测试
    @Test
    public void testUpdate() throws Exception {
        User user = new User()
                .setId(1)
                .setUserName("小明")
                .setUserPass("55555");
        userDao.update(user);
    }

在这里插入图片描述
可以看到id为1的用户修改成功!

③删除测试

 //删除测试
    @Test
    public void testDelete() throws Exception {
        int id = 2;
        userDao.delete(id);
    }

id为2的数据被删除
在这里插入图片描述

ps:第一次写所有有很多重复代码,后面会修改封装。

6,对重复代码进行改善封装,编写一个工具类

创建一个jdbcutil类

public final class jdbcUtil01 {
    private static final String url = "jdbc:mysql://localhost:3306/aad?useSSL=false&charactorEncoding=utf8";
    private static final String user1 = "root";
    private static final String password = "123456";
    private jdbcUtil01() {
    }
    //加载驱动器类,只执行一次就可以了,无需返回
    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        }catch (Exception e) {
            //e.printStackTrace();
            throw new RuntimeException("加载驱动器类出错,错误信息为" + e.getMessage());
        }
    }

    public static int  update(String sql, Object... params) {
        Connection con =null;
        PreparedStatement pstm = null;
        ResultSet rs = null;
        try {
            //加载驱动器类
            Class.forName("com.mysql.jdbc.Driver");
            //创建连接对象
            con = DriverManager.getConnection(url,user1,password);
            //创建执行sql语句对象
            pstm = con.prepareStatement(sql);
            //设置参数
            for(int i = 0; i < params.length; i++) {
                pstm.setObject(i + 1,params[i]);
            }
            //执行sql
            return pstm.executeUpdate();
        }catch (Exception e) {
            e.printStackTrace();
            return 0;
        }finally {
            distory(con,pstm,rs);
        }
    }

    //通用的释放资源方法。
    public static void distory(Connection con, PreparedStatement pstm, ResultSet rs) {
        //释放资源
        if(rs != null) {
            try{
                rs.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
        if(pstm != null) {
            try{
                pstm.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
        if(con != null) {
            try{
                con.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值