JDBC入门——对Mysql数据库的数据进行增删改查

以下是使用IntelliJ IDEA 2021创建名为JdbcDemo的Java项目,并基于JDK 1.8利用JDBC技术对MySQL数据库中student表进行增删改查操作的详细步骤:

一、创建Java项目

  1. 打开IntelliJ IDEA 2021:启动IntelliJ IDEA开发工具。
  2. 新建项目:点击File -> New -> Project,在弹出的窗口中选择Java项目类型,然后点击Next
  3. 配置项目基本信息
    • Project SDK:选择JDK 1.8版本(需提前安装并配置好JDK 1.8)。
    • Project name:填写JdbcDemo作为项目名称。
    • 点击Next,选择项目的存储路径,点击Finish完成项目的创建。

二、在Navicat中设计数据库表并录入数据

  1. 打开Navicat:启动Navicat数据库管理工具,连接到MySQL 8.0.27数据库(确保数据库服务已正常运行并且你有权限操作)。
  2. 创建数据库(如果不存在):右键点击连接,选择新建数据库,输入数据库名称(例如jdbc_demo),选择合适的字符集和排序规则,点击确定创建数据库。
  3. 创建表
    • 双击打开刚创建的数据库,在表的操作区域右键点击,选择新建表
    • 在表设计界面中,依次添加以下字段:
      • idNumber:字段类型选择int,可勾选主键(一般作为唯一标识每条记录的学号),根据需求可以设置为自增长(在MySQL中设置AUTO_INCREMENT属性实现自增长)。
      • studentname:字段类型根据实际需求选择合适的字符串类型,比如varchar,并设置合适的长度(如50),用于存储学生姓名。
      • classes:同样选择合适的字符串类型,例如varchar,设置长度来存储专业班级信息。
      • addr:选择合适的字符串类型,例如varchar,设置长度来存储籍贯信息。
    • 点击保存,输入表名student,保存该表结构。
  4. 插入测试数据
    • 右键点击student表,选择打开表,在弹出的数据录入界面中,手动输入不少于3条的记录数据,例如:
      • idNumber1studentname张三classes计算机科学与技术1班addr北京
      • idNumber2studentname李四classes软件工程2班addr上海
      • idNumber3studentname王五classes网络工程3班addr广州
    • 输入完每条记录后点击保存按钮插入数据到表中。

三、添加MySQL数据库驱动依赖到项目

  1. 下载MySQL 8.0.27版本的JDBC驱动Jar包
    可以从MySQL官方网站下载对应的mysql-connector-java-8.0.27.jar文件。
  2. 将Jar包添加到项目
    在IntelliJ IDEA中,右键点击项目结构中的Libraries,选择New -> Java Library,然后在弹出的窗口中点击+号,选择From files...,找到下载好的mysql-connector-java-8.0.27.jar文件并添加进来,点击OK完成添加。

四、编写Java代码实现增删改查操作

  1. 创建包结构及Student实体类(可选,方便操作数据)
    在项目的src目录下创建包,例如com.example.jdbcdemo(可根据实际情况自定义包名),在该包下创建Student实体类,用于映射数据库中的student表记录,代码示例如下:
package com.example.jdbcdemo;

public class Student {
    private int idNumber;
    private String studentname;
    private String classes;
    private String addr;

    // 生成对应的getter和setter方法
    public int getIdNumber() {
        return idNumber;
    }

    public void setIdNumber(int idNumber) {
        this.idNumber = idNumber;
    }

    public String getStudentname() {
        return studentname;
    }

    public void setStudentname(String studentname) {
        this.studentname = studentname;
    }

    public String getClasses() {
        return classes;
    }

    public void setClasses(String classes) {
        this.classes = classes;
    }

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }
}
  1. 创建JdbcUtil工具类(用于获取数据库连接等通用操作)
    com.example.jdbcdemo包下创建JdbcUtil工具类,代码示例如下:
package com.example.jdbcdemo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JdbcUtil {
    private static final String URL = "jdbc:mysql://localhost:3306/jdbc_demo?useSSL=false&serverTimezone=UTC";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "your_password";

    static {
        try {
            // 加载驱动(在JDBC 4.0及以上版本,可省略这一步,自动加载驱动,但写上也无妨)
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USERNAME, PASSWORD);
    }
}

注意将上述代码中的数据库连接相关信息(如用户名、密码、数据库名称等)替换为你实际使用的内容。

  1. 创建StudentDao接口及实现类(用于定义和实现数据访问操作)
    • com.example.jdbcdemo包下创建StudentDao接口,定义增删改查的抽象方法,代码示例如下:
package com.example.jdbcdemo;

import java.util.List;

public interface StudentDao {
    int insertStudent(Student student);
    int updateStudent(Student student);
    int deleteStudent(int idNumber);
    Student findStudentById(int idNumber);
    List<Student> findAllStudents();
}
- 在相同包下创建`StudentDaoImpl`类实现`StudentDao`接口,代码示例如下:
package com.example.jdbcdemo;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class StudentDaoImpl implements StudentDao {

    @Override
    public int insertStudent(Student student) {
        String sql = "INSERT INTO student (studentname, classes, addr) VALUES (?,?,?)";
        try (Connection connection = JdbcUtil.getConnection();
             PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            preparedStatement.setString(1, student.getStudentname());
            preparedStatement.setString(2, student.getClasses());
            preparedStatement.setString(3, student.getAddr());
            return preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
            return -1;
        }
    }

    @Override
    public int updateStudent(Student student) {
        String sql = "UPDATE student SET studentname =?, classes =?, addr =? WHERE idNumber =?";
        try (Connection connection = JdbcUtil.getConnection();
             PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            preparedStatement.setString(1, student.getStudentname());
            preparedStatement.setString(2, student.getClasses());
            preparedStatement.setString(3, student.getAddr());
            preparedStatement.setInt(4, student.getIdNumber());
            return preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
            return -1;
        }
    }

    @Override
    public int deleteStudent(int idNumber) {
        String sql = "DELETE FROM student WHERE idNumber =?";
        try (Connection connection = JdbcUtil.getConnection();
             PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            preparedStatement.setInt(1, idNumber);
            return preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
            return -1;
        }
    }

    @Override
    public Student findStudentById(int idNumber) {
        String sql = "SELECT * FROM student WHERE idNumber =?";
        try (Connection connection = JdbcUtil.getConnection();
             PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            preparedStatement.setInt(1, idNumber);
            ResultSet resultSet = preparedStatement.executeQuery();
            if (resultSet.next()) {
                Student student = new Student();
                student.setIdNumber(resultSet.getInt("idNumber"));
                student.setStudentname(resultSet.getString("studentname"));
                student.setClasses(resultSet.getString("classes"));
                student.setAddr(resultSet.getString("addr"));
                return student;
            }
            return null;
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public List<Student> findAllStudents() {
        String sql = "SELECT * FROM student";
        List<Student> studentList = new ArrayList<>();
        try (Connection connection = JdbcUtil.getConnection();
             PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            ResultSet resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                Student student = new Student();
                student.setIdNumber(resultSet.getInt("idNumber"));
                student.setStudentname(resultSet.getString("studentname"));
                student.setClasses(resultSet.getString("classes"));
                student.setAddr(resultSet.getString("addr"));
                studentList.add(student);
            }
            return studentList;
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }
}
  1. 创建测试类(用于验证增删改查操作)
    com.example.jdbcdemo包下创建JdbcDemoTest测试类(可以使用JUnit等测试框架进行更规范的测试,这里简单用main方法演示),代码示例如下:
package com.example.jdbcdemo;

import java.util.List;

public class JdbcDemoTest {
    public static void main(String[] args) {
        StudentDao studentDao = new StudentDaoImpl();

        // 插入学生数据测试
        Student newStudent = new Student();
        newStudent.setStudentname("赵六");
        newStudent.setClasses("物联网工程1班");
        newStudent.setAddr("深圳");
        int insertResult = studentDao.insertStudent(newStudent);
        if (insertResult > 0) {
            System.out.println("插入学生数据成功");
        } else {
            System.out.println("插入学生数据失败");
        }

        // 查询所有学生数据测试
        List<Student> studentList = studentDao.findAllStudents();
        if (studentList!= null) {
            for (Student student : studentList) {
                System.out.println(student.getIdNumber() + " - " + student.getStudentname() + " - " + student.getClasses() + " - " + student.getAddr());
            }
        }

        // 根据学号查询学生数据测试
        Student foundStudent = studentDao.findStudentById(1);
        if (foundStudent!= null) {
            System.out.println(foundStudent.getIdNumber() + " - " + foundStudent.getStudentname() + " - " + foundStudent.getClasses() + " - " + foundStudent.getAddr());
        }

        // 更新学生数据测试
        Student updateStudent = studentDao.findStudentById(1);
        if (updateStudent!= null) {
            updateStudent.setStudentname("张三改");
            updateStudent.setClasses("计算机科学与技术2班");
            updateStudent.setAddr("北京改");
            int updateResult = studentDao.updateStudent(updateStudent);
            if (updateResult > 0) {
                System.out.println("更新学生数据成功");
            } else {
                System.out.println("更新学生数据失败");
            }
        }

        // 删除学生数据测试
        int deleteResult = studentDao.deleteStudent(1);
        if (deleteResult > 0) {
            System.out.println("删除学生数据成功");
        } else {
            System.out.println("删除学生数据失败");
        }
    }
}

通过以上完整的步骤,就完成了使用IntelliJ IDEA 2021创建JdbcDemo项目,并利用JDBC技术对MySQL数据库中student表数据进行增删改查操作的功能实现。在实际应用中,可根据具体需求进一步优化和扩展相关功能,例如完善异常处理、添加事务管理等内容。

你可能感兴趣的:(数据库,mysql,java)