mvc_实现数据库增删改查
题目要求:
1、完成注册功能:通过控制台获取用户名、密码和确认密码,密码与确认密码相同才可以进行注册,注册成功或失败均给出相应的提示。
2、完成登录功能:通过控制台获取用户名和密码,完成登录功能,登录成功和失败均给出相应的提示。
3、向学生表中添加一条学生信息,信息由控制台获取,添加成功和失败均给出相应的提示
4、修改表中的学生信息,通过控制台获取用户输入学生的名字,判断该名字的记录是否存在,如果存在则将该学生的年龄修改为新年龄,新年龄的数据由控制台获取。修改成功或失败均给出相应的提示
5、删除学生表中的一条学生信息,通过控制台获取要删除的学生的姓名,判断该名字的记录是否存在,如果存在则删除。删除成功或失败均给出相应的提示。
6、查询所有的学生信息,并显示到控制台上
7、查询性别为男的学生信息。
1. 整体思路
首先建立几个package:
util包用来存储工具类;
dao包用来实现增改删查;
controller包;控制器+view
po包:对象包
service包:服务包
数据库-->dao-->service-->controler(这里的controller代替了view的功能)
2. 代码
po包内代码: Student类
public class Student {
private int id;
private String name;
private int age;
private String sex;
private String tel;
public Student() {
}
public Student(int id, String name, int age, String sex, String tel) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
this.tel = tel;
}
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", tel='" + tel + '\'' +
'}';
}
}
util包内代码(工具类)(封装数据,提高运行效率):util类
public class ConnUtil {
// 1.注册驱动
//类一加载,就需要做一些动作,而且只执行一次,比如jdbc中驱动的加载。
static{
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("驱动注册失败");
}
}
// 2.连接数据库并返回连接对象
public static Connection getConnection() throws SQLException { //优化代码
String url="jdbc:mysql://localhost:3306/mydb";
String username="root";
String pwd="js199803";
Connection conn =DriverManager.getConnection(url,username,pwd);
return conn;
}
//3.关闭资源
public static void close(ResultSet rs,PreparedStatement ps,Connection conn){ //优化代码
try {
if (rs!=null){
rs.close();
}
if (ps!=null){
ps.close();
}
if (conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// 2.连接数据库
// 3.关闭资源
}public class ConnUtil {
// 1.注册驱动
//类一加载,就需要做一些动作,而且只执行一次,比如jdbc中驱动的加载。
static{
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("驱动注册失败");
}
}
// 2.连接数据库并返回连接对象
public static Connection getConnection() throws SQLException { //优化代码
String url="jdbc:mysql://localhost:3306/mydb";
String username="root";
String pwd="js199803";
Connection conn =DriverManager.getConnection(url,username,pwd);
return conn;
}
//3.关闭资源
public static void close(ResultSet rs,PreparedStatement ps,Connection conn){ //优化代码
try {
if (rs!=null){
rs.close();
}
if (ps!=null){
ps.close();
}
if (conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// 2.连接数据库
// 3.关闭资源
}
dao包内代码(增删改查业务代码):StuDao类
public class StuDao {
Connection conn = null;
ResultSet rs=null;
PreparedStatement ps=null;
// 1.增加数据
public boolean addStu(Student s){
ConnUtil cu = new ConnUtil();
try {
conn = cu.getConnection();
String sql="insert into student values(default,?,?,?,?)";
ps=conn.prepareStatement(sql);
ps.setString(1,s.getName());
ps.setInt(2,s.getAge());
ps.setString(3,s.getSex());
ps.setString(4,s.getTel());
//执行sql
int count = ps.executeUpdate();
if(count>0){
return true;
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
cu.close(rs,ps,conn);
}
return false;
}
// 2.修改数据
public boolean updateStu(String name,int age){
ConnUtil cu=new ConnUtil();
try {
conn = cu.getConnection();
String sql="update student set stuAge="+age+" where stuName like '%"+name+"%'";
ps=conn.prepareStatement(sql);
int count=ps.executeUpdate();
if (count>0){
return true;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
}
return false;
}
// 3.删除数据
public boolean delStu(int id){//按照id号删除数据
ConnUtil cu = new ConnUtil();
try {
conn = cu.getConnection();
String sql="delete from student where stuID=?";
ps=conn.prepareStatement(sql);
ps.setInt(1,id);
int i = ps.executeUpdate();
if (i>0){
return true;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
cu.close(rs,ps,conn);
}
return false;
}
// 4.查找数据
public ArrayList<Student> findStu(String name){
ConnUtil cu = new ConnUtil();
ArrayList<Student> stuList = null;
try {
conn = cu.getConnection();
String sql="select * from student where stuName like '%"+name+"%'";
ps=conn.prepareStatement(sql);
rs = ps.executeQuery();
stuList=new ArrayList<Student>();
while(rs.next()){
//将查到的数据封装
Student s = new Student();
s.setId(rs.getInt("stuID"));
s.setName(rs.getString("stuName"));
s.setAge(rs.getInt("stuAge"));
s.setSex(rs.getString("stuSex"));
s.setTel(rs.getString("stuTel"));
stuList.add(s);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
cu.close(rs,ps,conn);
}
return stuList;
}
//check方法
public boolean check(String name) {
ConnUtil cu=new ConnUtil();
try {
conn=cu.getConnection();
String sql="select * from student where stuName like '%"+name+"%'";
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
if (rs.next()){
return true;
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
cu.close(rs,ps,conn);
}
return false;
}
}
service包内代码: stuService类 调用StuDao()方法
public class StuService {
private StuDao stuDao=new StuDao();
// 1.增加方法
public boolean addStu(Student s){
return stuDao.addStu(s);
}
//check 方法
// public boolean check(String name){
// return StuDao.check(name);
// }
// 2.修改方法
public boolean updateStu(String name,int age){
// 1.查询用户
boolean b=stuDao.check(name);
// 2.修改用户
if (b){
return stuDao.updateStu(name,age);
}
return false;
}
// 3.删除方法
public boolean delStu(int id){
return stuDao.delStu(id);
}
// 4.查询方法
public ArrayList<Student> findStuByName(String name){
return stuDao.findStu(name);
}
// 5.检查方法
public boolean check(String name){
return stuDao.check(name);
}
}
controller包内代码(这里的功能和view相同),用户界面,StuController类
public class StuController {
public static void main(String[] args) {
StuService ss = new StuService();
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请选择操作类型:1.添加 2.修改 3.删除 4.查询 5.退出系统");
int flag = sc.nextInt();
if (flag == 1) { //添加数据
//模拟view层
System.out.println("请输入姓名");
String name = sc.next();
System.out.println("请输入年龄");
int age = sc.nextInt();
System.out.println("请输入性别");
String sex = sc.next();
System.out.println("请输入电话号码");
String tel = sc.next();
//模拟controller层
//1.数据封装
Student s = new Student();
s.setName(name);
s.setAge(age);
s.setSex(sex);
s.setTel(tel);
//2.调用stuService
boolean addStu = ss.addStu(s);
//3.根据Service的返回结果,分发到view视图
if (addStu) {
System.out.println("添加成功");
} else {
System.out.println("添加失败");
}
} else if (flag == 2) { //2.修改数据
System.out.println("请输入您要修改的学生的学生姓名");
String name = sc.next();
System.out.println("请输入要修改的学生年龄");
int age = sc.nextInt();
// 2.1 数据封装
// 2.2调用 Service
boolean b = ss.updateStu(name, age);
if (b) {
System.out.println("修改成功");
} else {
System.out.println("修改失败");
}
} else if (flag == 3) { //3.删除数据
System.out.println("请输入你要删除的id编号");
int id = sc.nextInt();
// 3.1.封装,只有一个数据不用封装
// 3.2.调用StuService
boolean b = ss.delStu(id);
// 3.3.模拟view界面结果
if (b) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
} else if (flag == 4) { //4.查询数据
System.out.println("请输入要查找的用户名");
String name = sc.next();
//4.1封装,只有一个,无需封装
//4.2 调用StuService
ArrayList<Student> stuList = ss.findStuByName(name);
boolean b = ss.check(name);
if (b) {
for (Student s : stuList) {
System.out.println(s);
}
} else {
System.out.println("查无此人");
}
}
else if(flag==5){
System.exit(5);
} else{
System.out.println("请重新输入数字");
}
}
}
}
3. 注意事项
增删改用int i= ps.executeupdate();
查询用 rs=ps.executequery();