以下是使用IntelliJ IDEA 2021创建名为JdbcDemo
的Java项目,并基于JDK 1.8利用JDBC技术对MySQL数据库中student
表进行增删改查操作的详细步骤:
File
-> New
-> Project
,在弹出的窗口中选择Java
项目类型,然后点击Next
。JdbcDemo
作为项目名称。Next
,选择项目的存储路径,点击Finish
完成项目的创建。新建数据库
,输入数据库名称(例如jdbc_demo
),选择合适的字符集和排序规则,点击确定
创建数据库。新建表
。int
,可勾选主键
(一般作为唯一标识每条记录的学号),根据需求可以设置为自增长(在MySQL中设置AUTO_INCREMENT
属性实现自增长)。varchar
,并设置合适的长度(如50
),用于存储学生姓名。varchar
,设置长度来存储专业班级信息。varchar
,设置长度来存储籍贯信息。保存
,输入表名student
,保存该表结构。student
表,选择打开表
,在弹出的数据录入界面中,手动输入不少于3条的记录数据,例如:
idNumber
为1
,studentname
为张三
,classes
为计算机科学与技术1班
,addr
为北京
。idNumber
为2
,studentname
为李四
,classes
为软件工程2班
,addr
为上海
。idNumber
为3
,studentname
为王五
,classes
为网络工程3班
,addr
为广州
。保存
按钮插入数据到表中。mysql-connector-java-8.0.27.jar
文件。Libraries
,选择New
-> Java Library
,然后在弹出的窗口中点击+
号,选择From files...
,找到下载好的mysql-connector-java-8.0.27.jar
文件并添加进来,点击OK
完成添加。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;
}
}
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);
}
}
注意将上述代码中的数据库连接相关信息(如用户名、密码、数据库名称等)替换为你实际使用的内容。
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;
}
}
}
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
表数据进行增删改查操作的功能实现。在实际应用中,可根据具体需求进一步优化和扩展相关功能,例如完善异常处理、添加事务管理等内容。