写在前面:
这是一个练习java如何操作mysql的一个小练习,希望能给需要的人带来帮助
内容:
1.整体框架:
2.引入jdbc:
可以戳这里:
1.引入jdbc
3.建立包层级结构:
如果不会建立子包可以戳这里:
4.代码:
1.首先在db表中,写入连接数据库的代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
//连接数据库
public class DBUtil {
private static String URL = "jdbc:mysql://127.0.0.1:3306/test";
private static String USERNAME = "root";
private static String PASSWORD = "mysql1.";
private static Connection con;
static {
// 加载驱动类型
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
// 创建数据库连接
try {
con = DriverManager.getConnection(URL,USERNAME,PASSWORD);
} catch (Exception e) {
e.printStackTrace();
}
}
// 获取Connection对象
public static Connection getConnection() {
return con;
}
}
2.根据思维导图,进行第二部,在model中把我们数据库中的表,建立为类
答主这里是学生表:
结构如下:
import java.util.Date;
// 学生类
public class Student {
// 成员变量
private int id;
private String name;
private String sex;
private Date birthday;
private String address;
// 设置和获取id
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
// 设置和获取名字
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 设置和获取性别
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
// 设置和获取生日
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
// 设置和获取地址
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
3.在dao包中实现对数据的增删改查:
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
import com.db.DBUtil;
import com.model.Student;
// 对学生表进行增删改查
public class ModifyStudent {
// 增加学生信息:姓名,年龄,生日,家庭住址
public void addStudent(String name,String sex,Date birth,String address) throws SQLException {
// 声明学生对象
Student s = new Student();
s.setName(name);
s.setSex(sex);
s.setBirthday(birth);
s.setAddress(address);
// 创建statement对象
Statement st = DBUtil.getConnection().createStatement();
int res = st.executeUpdate("insert into `student` values(NULL,'"+s.getName()+"','"+s.getSex()+"','"+s.getBirthday()+"','"+s.getAddress()+"');");
if(res > 0) {
System.out.println("添加成功");
}else {
System.out.println("添加出错,请认真核实改信息是否重复或者错误");
}
}
// 删除学生信息
public void delStudent(int id) throws SQLException {
Statement st = DBUtil.getConnection().createStatement();
int res = st.executeUpdate("delete from student where `id` = '"+id+"'");
if(res > 0) {
System.out.println("删除成功");
}else {
System.out.println("改信息不存在");
}
}
// 更新学生信息
public void updateStudent(String name1,String newName) throws SQLException {
Statement st = DBUtil.getConnection().createStatement();
int res = st.executeUpdate("update `student` set `name` = '"+newName+"' where `name` = '"+name1+"'");
if(res > 0) {
System.out.println("更新成功");
}else {
System.out.println("更新失败");
}
}
// 查询学生信息
public void queryStudent(String name) throws SQLException {
Statement st = DBUtil.getConnection().createStatement();
ResultSet rs = st.executeQuery("select * from student");
boolean falg = false;
while(rs.next()) {
if(rs.getString("name").equals(name)) {
falg = true;
System.out.println(rs.getObject("id") + " " + rs.getObject("name") + " "+rs.getObject("sex") +" "+rs.getObject("birthday")+ " "+rs.getObject("address"));
}
}
if(!falg) {
System.out.println("改信息不存在");
}
}
}
这里其实并没有什么难度,就是mysql中的增删改查语句而已。
4.在controller包中对dao包中操作进行封装:
import java.sql.SQLException;
import java.util.Date;
import com.dao.ModifyStudent;
// 操作协调层
public class Action {
// dao层对象
ModifyStudent ms = new ModifyStudent();
// 添加学生信息
public void add(String name,String sex,Date birth,String address) throws SQLException {
ms.addStudent(name, sex, birth, address);
}
// 删除学生信息
public void del(int id) throws SQLException {
ms.delStudent(id);
}
// 更新学生信息
public void upd(String name,String newName) throws SQLException {
ms.updateStudent(name, newName);
}
// 查询学生信息
public void query(String name) throws SQLException {
ms.queryStudent(name);
}
}
5.最后,去view包中,写出menu界面就可以了
这里提出答主踩得坑:
1.生日设置的日期时间类型和java中日期时间类型的转换。
在下面的代码中,答主标注了下,感兴趣的朋友可以研究下:
// 菜单界面
public class Menu {
public static void main(String[] args) throws SQLException, ParseException {
System.out.println("******************************************欢迎来到学生管理系统******************************************************");
System.out.print("提示菜单:\n" +
"查看学生信息【1】**\n" +
"增加学生信息【2】**\n" +
"删除学生信息【3】**\n" +
"修改学生信息【4】**\n"
);
// 获取action对象
Action ac = new Action();
Scanner sc = new Scanner(System.in);
// 开始操作
while(sc.hasNext()) {
int n = sc.nextInt();
switch(n) {
case 1:
System.out.println("请输入你要查看的学生姓名:");
String name1 = sc.next();
ac.query(name1);
break;
case 2:
System.out.println("请输入您要添加的学生的姓名、性别、生日、地址");
String name2 = sc.next();
String sex2 = sc.next();
String s2 = sc.next();
String address2 = sc.next();
// 日期转化:
// 将字符串类型转换为日期对象
DateFormat format = new SimpleDateFormat("yyyy-mm-dd");
java.util.Date date = format.parse(s2);
// 转化为数据库中的日期对象
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
ac.add(name2, sex2, sqlDate, address2);
break;
case 3:
System.out.println("请输入您要删除的学生的id:");
int id = sc.nextInt();
ac.del(id);
break;
case 4:
System.out.println("请输入您要操作的学生的姓名:");
String oldName = sc.next();
System.out.println("请输入你要更新的新名字:");
String newName = sc.next();
ac.upd(oldName, newName);
break;
default:
System.out.println("违法操作!!");
}
}
}
}
6.效果:
大家可能好奇,为什么要在不同包中进行不同的操作,这个是根据mvc设计结构来的。有兴趣的朋友可以了解下。