Java学习-用JDBC通过CURD实现简单的业务,用户登陆,学生管理

矫情吗;* 2024-04-08 11:07 109阅读 0赞

上一篇已经学完了JDBC,这篇讲一下基本的CURD实现简单的业务。

基本准备
  1. 数据表两张分别是user表和学生表student1结构如下
    在这里插入图片描述
    分别对应,用户id,用户名,密码,错误次数,状态(是否锁定)
    在这里插入图片描述
    学生表,分别对应,学号,姓名,性别,年龄,地址
    mysql的jar包
    数据插入

    SET FOREIGN_KEY_CHECKS=0;


    — Table structure for student1


    DROP TABLE IF EXISTS student1;
    CREATE TABLE student1 (
    sid int(11) NOT NULL AUTO_INCREMENT,
    sname varchar(8) NOT NULL,
    sgender char(255) NOT NULL,
    sage int(3) DEFAULT NULL,
    saddress varchar(255) DEFAULT NULL,
    PRIMARY KEY (sid)
    ) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8;


    — Records of student1


    INSERT INTO student1 VALUES (‘1’, ‘李青’, ‘男’, ‘48’, ‘德玛西亚’);
    INSERT INTO student1 VALUES (‘2’, ‘艾瑞莉娅’, ‘女’, ‘26’, ‘艾欧尼亚’);
    INSERT INTO student1 VALUES (‘3’, ‘锐雯’, ‘女’, ‘36’, ‘艾欧尼亚’);
    INSERT INTO student1 VALUES (‘4’, ‘凯特琳’, ‘女’, ‘28’, ‘皮尔特沃夫’);
    INSERT INTO student1 VALUES (‘5’, ‘蔚’, ‘女’, ‘28’, ‘皮尔特沃夫’);
    INSERT INTO student1 VALUES (‘6’, ‘金克丝’, ‘女’, ‘28’, ‘皮尔特沃夫’);
    INSERT INTO student1 VALUES (‘7’, ‘普朗克’, ‘男’, ‘45’, ‘比尔吉沃特’);
    INSERT INTO student1 VALUES (‘8’, ‘好运姐’, ‘女’, ‘36’, ‘比尔吉沃特’);
    INSERT INTO student1 VALUES (‘9’, ‘锤石’, ‘男’, ‘96’, ‘暗影岛’);
    INSERT INTO student1 VALUES (‘10’, ‘佛耶戈’, ‘男’, ‘52’, ‘暗影岛’);
    INSERT INTO student1 VALUES (‘11’, ‘雷欧娜’, ‘女’, ‘36’, ‘巨神峰’);
    INSERT INTO student1 VALUES (‘12’, ‘阿兹尔’, ‘男’, ‘108’, ‘恕瑞玛’);
    INSERT INTO student1 VALUES (‘13’, ‘内瑟斯’, ‘男’, ‘118’, ‘恕瑞玛’);
    INSERT INTO student1 VALUES (‘14’, ‘雷克顿’, ‘男’, ‘118’, ‘恕瑞玛’);
    INSERT INTO student1 VALUES (‘15’, ‘艾希’, ‘女’, ‘38’, ‘弗雷尔卓德’);
    INSERT INTO student1 VALUES (‘16’, ‘瑟庄妮’, ‘女’, ‘45’, ‘弗雷尔卓德’);
    INSERT INTO student1 VALUES (‘17’, ‘丽桑卓’, ‘女’, ‘82’, ‘弗雷尔卓德’);
    INSERT INTO student1 VALUES (‘18’, ‘亚索’, ‘男’, ‘35’, ‘艾欧尼亚’);
    INSERT INTO student1 VALUES (‘19’, ‘永恩’, ‘男’, ‘36’, ‘艾欧尼亚’);
    INSERT INTO student1 VALUES (‘20’, ‘德莱厄斯’, ‘男’, ‘36’, ‘诺克萨斯’);
    INSERT INTO student1 VALUES (‘21’, ‘卡特琳娜’, ‘女’, ‘32’, ‘诺克萨斯’);
    INSERT INTO student1 VALUES (‘22’, ‘德莱文’, ‘男’, ‘30’, ‘诺克萨斯’);
    INSERT INTO student1 VALUES (‘23’, ‘斯维因’, ‘男’, ‘50’, ‘诺克萨斯’);
    INSERT INTO student1 VALUES (‘24’, ‘杰斯’, ‘男’, ‘40’, ‘皮尔特沃夫’);
    INSERT INTO student1 VALUES (‘25’, ‘维克托’, ‘男’, ‘41’, ‘皮尔特沃夫’);
    INSERT INTO student1 VALUES (‘26’, ‘沃里克’, ‘男’, ‘45’, ‘祖安’);
    INSERT INTO student1 VALUES (‘27’, ‘蒙多’, ‘男’, ‘40’, ‘祖安’);
    INSERT INTO student1 VALUES (‘28’, ‘凯尔’, ‘女’, ‘139’, ‘烈焰阳刚’);
    INSERT INTO student1 VALUES (‘29’, ‘莫甘娜’, ‘女’, ‘139’, ‘烈焰阳刚’);
    INSERT INTO student1 VALUES (‘30’, ‘卡蜜尔’, ‘女’, ‘30’, ‘皮尔特沃夫’);
    INSERT INTO student1 VALUES (‘31’, ‘菲奥娜’, ‘女’, ‘35’, ‘皮尔特沃夫’);
    INSERT INTO student1 VALUES (‘32’, ‘拉克丝’, ‘女’, ‘30’, ‘德玛西亚’);
    INSERT INTO student1 VALUES (‘34’, ‘乐芙兰’, ‘女’, ‘32’, ‘黑色玫瑰’);
    INSERT INTO student1 VALUES (‘35’, ‘亚托克斯’, ‘男’, ‘108’, ‘恕瑞玛’);
    INSERT INTO student1 VALUES (‘36’, ‘沃利贝尔’, ‘男’, ‘89’, ‘无畏先锋’);

    SET FOREIGN_KEY_CHECKS=0;


    — Table structure for user


    DROP TABLE IF EXISTS user;
    CREATE TABLE user (
    uid int(11) NOT NULL AUTO_INCREMENT,
    username varchar(16) NOT NULL,
    password varchar(16) NOT NULL,
    wrong_times int(1) NOT NULL,
    status int(1) NOT NULL DEFAULT ‘0’,
    PRIMARY KEY (uid)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;


    — Records of user


    INSERT INTO user VALUES (‘1’, ‘奥特曼’, ‘111111’, ‘0’, ‘0’);

需求分析
  1. 要求实现模拟用户登陆

    如果用户名不存在,则提示用户名不存在。密码错误则提示密码错误。
    用户名输入正确密码输入正确,可以正常登陆系统。否则不允许登陆。
    并且密码输错三次,对帐号进行锁定。再次登陆时提示已锁定。
    只要未满三次错误,输入正确,则错误次数重置。

  2. 模拟学生管理,应包含以下功能

    对数据表中的所有学生进行输出
    可以根据关键字段模糊查询学生
    根据学号,对学生信息进行修改
    根据学号,对学生进行单条删除

  3. 系统功能

    可以实现用户通过输入指令对所有功能进行操作

代码编写

目录层级如下:
在这里插入图片描述

entity包

Student

  1. package com.lzl.StudentManage.entity;
  2. import java.util.Date;
  3. public class Student {
  4. private Integer sid;
  5. private String sname;
  6. private String sgender;
  7. private Integer sage;
  8. private String saddress;
  9. public Student(Integer sid, String sname, String sgender, Integer sage, String saddress) {
  10. this.sid = sid;
  11. this.sname = sname;
  12. this.sgender = sgender;
  13. this.sage = sage;
  14. this.saddress = saddress;
  15. }
  16. public Student() {
  17. }
  18. public Integer getSid() {
  19. return sid;
  20. }
  21. public void setSid(Integer sid) {
  22. this.sid = sid;
  23. }
  24. public String getSname() {
  25. return sname;
  26. }
  27. public void setSname(String sname) {
  28. this.sname = sname;
  29. }
  30. public String getSgender() {
  31. return sgender;
  32. }
  33. public void setSgender(String sgender) {
  34. this.sgender = sgender;
  35. }
  36. public Integer getSage() {
  37. return sage;
  38. }
  39. public void setSage(Integer sage) {
  40. this.sage = sage;
  41. }
  42. public String getSaddress() {
  43. return saddress;
  44. }
  45. public void setSaddress(String saddress) {
  46. this.saddress = saddress;
  47. }
  48. @Override
  49. public String toString() {
  50. return "Student{" +
  51. "sid=" + sid +
  52. ", sname='" + sname + '\'' +
  53. ", sgender='" + sgender + '\'' +
  54. ", sage=" + sage +
  55. ", saddress='" + saddress + '\'' +
  56. '}';
  57. }
  58. }

User

  1. package com.lzl.StudentManage.entity;
  2. public class User {
  3. private Integer uid;
  4. private String username;
  5. private String password;
  6. private Integer wrong_times;
  7. private Integer status;
  8. public User(Integer uid, String username, String password, Integer wrong_times, Integer status) {
  9. this.uid = uid;
  10. this.username = username;
  11. this.password = password;
  12. this.wrong_times = wrong_times;
  13. this.status = status;
  14. }
  15. public User() {
  16. }
  17. public Integer getUid() {
  18. return uid;
  19. }
  20. public void setUid(Integer uid) {
  21. this.uid = uid;
  22. }
  23. public String getUsername() {
  24. return username;
  25. }
  26. public void setUsername(String username) {
  27. this.username = username;
  28. }
  29. public String getPassword() {
  30. return password;
  31. }
  32. public void setPassword(String password) {
  33. this.password = password;
  34. }
  35. public Integer getWrong_times() {
  36. return wrong_times;
  37. }
  38. public void setWrong_times(Integer wrong_times) {
  39. this.wrong_times = wrong_times;
  40. }
  41. public Integer getStatus() {
  42. return status;
  43. }
  44. public void setStatus(Integer status) {
  45. this.status = status;
  46. }
  47. @Override
  48. public String toString() {
  49. return "User{" +
  50. "uid=" + uid +
  51. ", username='" + username + '\'' +
  52. ", password='" + password + '\'' +
  53. ", wrong_times=" + wrong_times +
  54. ", status=" + status +
  55. '}';
  56. }
  57. }

util包

DBUtil

  1. package com.lzl.StudentManage.util;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. import java.sql.Statement;
  8. import java.util.ArrayList;
  9. public class DBUtil {
  10. private static final String driver = "com.mysql.jdbc.Driver";
  11. private static final String url = "jdbc:mysql://localhost:3306/qianfeng";
  12. private static final String user = "root";
  13. private static final String password = "123456";
  14. public static Connection getConnection() {
  15. Connection con = null;
  16. try {
  17. Class.forName(driver);
  18. con = DriverManager.getConnection(url, user, password);
  19. } catch (ClassNotFoundException e) {
  20. e.printStackTrace();
  21. } catch (SQLException e) {
  22. e.printStackTrace();
  23. }
  24. return con;
  25. }
  26. public static void closeAll(Connection conn, Statement state,ResultSet rs) {
  27. try {
  28. if (conn != null){
  29. conn.close();
  30. }
  31. if (state != null){
  32. state.close();
  33. }
  34. if(rs != null){
  35. rs.close();
  36. }
  37. } catch (SQLException e) {
  38. e.printStackTrace();
  39. }
  40. }
  41. public static int executeUpdate(String sql,ArrayList params){
  42. //创建连接
  43. Connection conn = null;
  44. //创建平台
  45. PreparedStatement ps = null;
  46. try {
  47. conn = getConnection();
  48. //预编译sql语句
  49. ps = conn.prepareStatement(sql);
  50. //设置参数
  51. for (int i = 0; i < params.size(); i++) {
  52. ps.setObject(i + 1, params.get(i));
  53. }
  54. //返回受影响行数
  55. return ps.executeUpdate();
  56. } catch (SQLException e) {
  57. e.printStackTrace();
  58. } finally {
  59. closeAll(conn, ps,null);
  60. }
  61. return -1;
  62. }
  63. }

StringUtil

  1. package com.lzl.StudentManage.util;
  2. /**
  3. * 处理字符串工具类
  4. */
  5. public class StringUtil {
  6. /**
  7. * 是null 或者 是 空字符串
  8. */
  9. public static boolean isNull(Object obj) {
  10. //将Object转为String
  11. String str = (String)obj;
  12. //返回true | false
  13. return (str == null) || (str.length() == 0);
  14. }
  15. }

controller包

LoginController

  1. package com.lzl.StudentManage.controller;
  2. import com.lzl.StudentManage.entity.User;
  3. import com.lzl.StudentManage.util.DBUtil;
  4. import java.sql.Connection;
  5. import java.sql.PreparedStatement;
  6. import java.sql.ResultSet;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. import java.util.Scanner;
  10. public class LoginController {
  11. //获得连接
  12. private Connection conn = null;
  13. //预编译处理对象
  14. private PreparedStatement pst = null;
  15. //结果集
  16. private ResultSet rts = null;
  17. //注入student控制层
  18. static StudentController studentController = new StudentController();
  19. /**
  20. * 登录方法
  21. */
  22. public void getLogin(){
  23. Scanner scanner = new Scanner(System.in);
  24. String key = "y";
  25. try {
  26. conn = DBUtil.getConnection();
  27. //预编译
  28. String sql = "select * from user where username = ? ";
  29. pst = conn.prepareStatement(sql);
  30. do{
  31. System.out.println("请输入帐号:");
  32. String name = scanner.nextLine();
  33. pst.setString(1,name);
  34. System.out.println("请输入密码");
  35. String pwd = scanner.nextLine();
  36. System.out.println("正在登陆");
  37. for (int i = 0; i < 3; i++) {
  38. Thread.sleep(500);
  39. System.out.print(".");
  40. }
  41. System.out.println();
  42. rts = pst.executeQuery();
  43. List<User> list = new ArrayList<>();
  44. while (rts.next()){
  45. User user = new User();
  46. user.setUid(rts.getInt("uid"));
  47. user.setUsername(rts.getString("username"));
  48. user.setPassword(rts.getString("password"));
  49. user.setWrong_times(rts.getInt("wrong_times"));
  50. user.setStatus(rts.getInt("status"));
  51. list.add(user);
  52. }
  53. if (list.size()!=0){
  54. for (User user : list) {
  55. if(user.getStatus()!=1){
  56. if(user.getPassword().equals(pwd)){
  57. System.out.println("登陆成功,欢迎回来!");
  58. String sql1 = "update user set wrong_times = 0 where username = ?";
  59. PreparedStatement pst1 = conn.prepareStatement(sql1);
  60. pst1.setString(1,name);
  61. pst1.executeUpdate();
  62. studentController.getMenu();
  63. key = "n";
  64. DBUtil.closeAll(null,pst1,rts);
  65. }else {
  66. if (user.getWrong_times()<3){
  67. String sql2 = "update user set wrong_times = wrong_times + 1 where username = ?";
  68. PreparedStatement pst2 = conn.prepareStatement(sql2);
  69. pst2.setString(1,name);
  70. pst2.executeUpdate();
  71. System.out.println("密码输入错误,您已输错"+(user.getWrong_times()+1)+"次!");
  72. System.out.println("错误3次,帐号将被锁定!");
  73. System.out.println("是否重试?y/n");
  74. key = scanner.nextLine();
  75. DBUtil.closeAll(null,pst2,rts);
  76. }
  77. if(user.getWrong_times()==3){
  78. String sql3 = "update user set status = 1 where username = ?";
  79. PreparedStatement pst3 = conn.prepareStatement(sql3);
  80. pst3.setString(1,name);
  81. pst3.executeUpdate();
  82. System.out.println("密码错误已达3次,您的帐号疑似处于不安全状态!帐号已被锁定!!");
  83. System.out.println("请联系管理员解锁!");
  84. key = "n";
  85. DBUtil.closeAll(null,pst3,rts);
  86. }
  87. }
  88. }else {
  89. System.out.println("密码错误已达3次,您的帐号疑似处于不安全状态!帐号已被锁定!!");
  90. System.out.println("请联系管理员解锁!");
  91. key = "n";
  92. }
  93. }
  94. }else {
  95. System.out.println("用户名不存在!");
  96. System.out.println("是否重试!y/n");
  97. key = scanner.nextLine();
  98. }
  99. }while (key.equals("y"));
  100. } catch (Exception e) {
  101. e.printStackTrace();
  102. } finally {
  103. DBUtil.closeAll(conn,pst,rts);
  104. }
  105. }
  106. }

StudentController

  1. package com.lzl.StudentManage.controller;
  2. import com.lzl.StudentManage.entity.Student;
  3. import com.lzl.StudentManage.service.serviceimpl.StudentServiceImpl;
  4. import java.util.*;
  5. public class StudentController {
  6. static StudentServiceImpl impl = new StudentServiceImpl();
  7. static Scanner scanner = new Scanner(System.in);
  8. /**
  9. * 查询(条件)所有用户
  10. * @param student 查询的关键字
  11. * @return 所有符合条件的用户
  12. */
  13. private static List<Student> getAll(Student student){
  14. Map<String, Object> map = new HashMap<>();
  15. map.put("sid",student.getSid());
  16. map.put("sname",student.getSname());
  17. map.put("sgender",student.getSgender());
  18. map.put("sage",student.getSage());
  19. map.put("saddress",student.getSaddress());
  20. return impl.getAll(map);
  21. }
  22. /**
  23. *多条件查询用户
  24. */
  25. public void searchPrintAll(){
  26. System.out.println("您可以进行关键字查询,请选择您要查询的关键字类别");
  27. System.out.println("1:学号,2:姓名,3:性别,4:年龄,5:家庭住址");
  28. Integer key = scanner.nextInt();
  29. Student student = searchWords(key);
  30. List<Student> list = getAll(student);
  31. if (list.size()>0){
  32. System.out.println("查询信息如下");
  33. System.out.println("学号\t姓名\t\t性别 年龄 家庭住址");
  34. for (Student s : list) {
  35. if (s.getSname().length()>=2){
  36. if (s.getSage() > 99){
  37. System.out.println(s.getSid()+"\t|"+s.getSname()+"\t|"+s.getSgender()
  38. +"\t|"+s.getSage()+"\t|"+s.getSaddress());
  39. }else {
  40. System.out.println(s.getSid()+"\t|"+s.getSname()+"\t|"+s.getSgender()
  41. +"\t|"+s.getSage()+"\t\t|"+s.getSaddress());
  42. }
  43. } else if(s.getSname().length()==1){
  44. System.out.println(s.getSid()+"\t|"+s.getSname()+"\t\t|"+s.getSgender()
  45. +"\t|"+s.getSage()+"\t\t|"+s.getSaddress());
  46. }else {
  47. System.out.println(s.getSid()+"\t|"+s.getSname()+"\t\t|"+s.getSgender()
  48. +"\t|"+s.getSage()+"\t|"+s.getSaddress());
  49. }
  50. }
  51. }else {
  52. System.out.println("没有相关数据!");
  53. }
  54. }
  55. /**
  56. * 无条件输出所有学生信息
  57. */
  58. private void printAll() {
  59. Student student = new Student();
  60. List<Student> list = getAll(student);
  61. System.out.println("学号\t姓名\t\t性别 年龄 \t家庭住址");
  62. for (Student s : list) {
  63. if (s.getSname().length()>=2){
  64. if (s.getSage() > 99){
  65. System.out.println(s.getSid()+"\t|"+s.getSname()+"\t|"+s.getSgender()
  66. +"\t|"+s.getSage()+"\t|"+s.getSaddress());
  67. }else {
  68. System.out.println(s.getSid()+"\t|"+s.getSname()+"\t|"+s.getSgender()
  69. +"\t|"+s.getSage()+"\t\t|"+s.getSaddress());
  70. }
  71. } else if(s.getSname().length()==1){
  72. System.out.println(s.getSid()+"\t|"+s.getSname()+"\t\t|"+s.getSgender()
  73. +"\t|"+s.getSage()+"\t\t|"+s.getSaddress());
  74. }else {
  75. System.out.println(s.getSid()+"\t|"+s.getSname()+"\t\t|"+s.getSgender()
  76. +"\t|"+s.getSage()+"\t|"+s.getSaddress());
  77. }
  78. }
  79. }
  80. /**
  81. * 设置多条件查询的关键字
  82. * @param key 查询编号
  83. * @return 一个用于多条件查询的学生实体
  84. */
  85. private static Student searchWords(Integer key) {
  86. Student student = new Student();
  87. if(key==1){
  88. System.out.println("请输入您想要查询的学号:");
  89. Integer sid = scanner.nextInt();
  90. student.setSid(sid);
  91. }else if (key==2){
  92. System.out.println("请输入您想要查询的姓名关键字:");
  93. String sname = scanner.next();
  94. student.setSname(sname);
  95. }else if (key == 3){
  96. System.out.println("请输入您想要查询的性别(男/女):");
  97. String sgender = scanner.next();
  98. student.setSgender(sgender);
  99. }else if (key == 4){
  100. System.out.println("请输入您想要查询的年龄:");
  101. Integer sage = scanner.nextInt();
  102. student.setSage(sage);
  103. }else if (key == 5){
  104. System.out.println("请输入您想要查询的家庭住址:");
  105. String saddress = scanner.next();
  106. student.setSaddress(saddress);
  107. }else {
  108. System.out.println("你是来捣乱的吧!乱输入,给你所有的数据,玩去吧!");
  109. }
  110. return student;
  111. }
  112. /**
  113. * 获得功能菜单
  114. */
  115. public void getMenu() {
  116. int key = 0;
  117. do{
  118. System.out.println("==============================功能菜单==========================");
  119. System.out.println("您有以下功能:1:输出所有学生信息,2:模糊查询学生,3:新增学生,4:修改学生信息," +
  120. "5:删除学生信息,0:退出系统");
  121. key = scanner.nextInt();
  122. switch (key){
  123. case 1:
  124. printAll();
  125. break;
  126. case 2:
  127. searchPrintAll();
  128. break;
  129. case 3:
  130. addNew();
  131. break;
  132. case 4:
  133. updateBySid();
  134. break;
  135. case 5:
  136. deleteBySid();
  137. break;
  138. case 0:
  139. break;
  140. default:
  141. System.out.println("你是来找茬的吧?");
  142. break;
  143. }
  144. }while (key!=0);
  145. System.out.println("您已成功退出!");
  146. }
  147. /**
  148. * 新增方法
  149. */
  150. private void addNew() {
  151. System.out.println("正在进行新增操作");
  152. System.out.println("请输入新增学生姓名:");
  153. String sname = scanner.next();
  154. System.out.println("输入新增学生性别:");
  155. String sgender = scanner.next();
  156. System.out.println("输入新增学生年龄");
  157. Integer sage = scanner.nextInt();
  158. System.out.println("输入学生地址:");
  159. String saddress = scanner.next();
  160. Student student = new Student(null,sname,sgender,sage,saddress);
  161. System.out.println("新增学生信息如下:");
  162. System.out.println("姓名:"+sname+"|性别:"+sgender
  163. +"|年龄:"+sage+"|地址:"+saddress);
  164. Integer key = impl.insertStudent(student);
  165. if (key > 0){
  166. System.out.println("新增成功!");
  167. }else {
  168. System.out.println("新增失败!");
  169. }
  170. }
  171. /**
  172. * 修改方法
  173. */
  174. private void updateBySid() {
  175. System.out.println("正在进行修改操作");
  176. System.out.println("请输入要修改学生的学号:");
  177. String sid = scanner.next();
  178. System.out.println("请输入新的姓名:");
  179. String sname = scanner.next();
  180. System.out.println("输入新的学生性别:");
  181. String sgender = scanner.next();
  182. System.out.println("输入新的学生年龄:");
  183. String sage = scanner.next();
  184. System.out.println("输入新的学生地址:");
  185. String saddress = scanner.next();
  186. System.out.println("修改后学生信息如下:");
  187. System.out.println("姓名:"+sname+"|性别:"+sgender
  188. +"|年龄:"+sage+"|地址:"+saddress);
  189. ArrayList<String> parms = new ArrayList<>();
  190. parms.add(sname);
  191. parms.add(sgender);
  192. parms.add(sage);
  193. parms.add(saddress);
  194. parms.add(sid);
  195. //此处id要最后放入集合,因为DBUtil中字符串拼接按添加的先后顺序
  196. //update语句的where子句在最后,所以sid放再最后,其它字段按原顺序
  197. Integer key = impl.updateStudent(parms);
  198. if (key > 0){
  199. System.out.println("修改成功!");
  200. }else {
  201. System.out.println("修改失败!");
  202. }
  203. }
  204. /**
  205. * 删除方法
  206. */
  207. private void deleteBySid() {
  208. System.out.println("正在进行删除操作");
  209. System.out.println("请输入要删除的学生学号:");
  210. String sid = scanner.next();
  211. Integer key = impl.deleteStudent(sid);
  212. if (key > 0){
  213. System.out.println("删除成功!");
  214. }else {
  215. System.out.println("删除失败!");
  216. }
  217. }
  218. }

service包

StudentService

  1. package com.lzl.StudentManage.service;
  2. import com.lzl.StudentManage.entity.Student;
  3. import com.lzl.day029.User;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import java.util.Map;
  7. public interface StudentService {
  8. /**
  9. * 获得所有用户
  10. * @param keys 多条件查询,分页参数
  11. * @return 所有符合条件用户集合
  12. */
  13. List<Student> getAll(Map<String,Object> keys);
  14. /**
  15. * 新增学生
  16. * @param student 新增的学生信息
  17. * @return 受影响行数
  18. */
  19. Integer insertStudent(Student student);
  20. /**
  21. * 修改数据
  22. * @param params 字符串集合
  23. * @return 受影响行数
  24. */
  25. Integer updateStudent(ArrayList<String> params);
  26. /**
  27. *
  28. * @param sid 学生学号
  29. * @return 受影响行数
  30. */
  31. Integer deleteStudent(String sid);
  32. }

StudentServiceImpl

  1. package com.lzl.StudentManage.service.serviceimpl;
  2. import com.lzl.StudentManage.entity.Student;
  3. import com.lzl.StudentManage.service.StudentService;
  4. import com.lzl.StudentManage.util.DBUtil;
  5. import com.lzl.StudentManage.util.StringUtil;
  6. import java.sql.Connection;
  7. import java.sql.PreparedStatement;
  8. import java.sql.ResultSet;
  9. import java.sql.SQLException;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. import java.util.Map;
  13. public class StudentServiceImpl implements StudentService {
  14. //获得连接
  15. private Connection conn = null;
  16. //预编译处理对象
  17. private PreparedStatement pst = null;
  18. //结果集
  19. private ResultSet rts = null;
  20. //参数集合
  21. private ArrayList<Object> params = null;
  22. /**
  23. * 获得所有用户
  24. *
  25. * @param keys 多条件查询,分页参数
  26. * @return 所有用户集合
  27. */
  28. @Override
  29. public List<Student> getAll(Map<String, Object> keys) {
  30. //构建数据存放容器
  31. List<Student> list = new ArrayList<>();
  32. //构建查询所需参数的容器
  33. params = new ArrayList<>();
  34. //初始化sql语句 设置1=1,确保语句能执行不报错
  35. String sql = "select * from student1 where 1 = 1";
  36. //拼串,将多条件查询需要的参数全部拼接过来
  37. //判断不为空,则进行拼接
  38. if(!StringUtil.isNull(keys.get("sid"))){
  39. //将sql语句进行拼接,注意and开头有一个空格
  40. sql+=" and sid = ?";
  41. //将后边要填补占位符的参数从Map(Controller传过来的参数)集合添加进参数容器
  42. params.add(keys.get("sid"));
  43. }
  44. if(!StringUtil.isNull(keys.get("sname"))){
  45. //将sql语句进行拼接,注意and开头有一个空格
  46. sql+=" and sname like ?";
  47. //将后边要填补占位符的参数从Map(Controller传过来的参数)集合添加进参数容器
  48. params.add("%"+keys.get("sname")+"%");
  49. }
  50. if(!StringUtil.isNull(keys.get("sgender"))){
  51. sql+=" and sgender = ?";
  52. params.add(keys.get("sgender"));
  53. }
  54. if(!StringUtil.isNull(keys.get("sage"))){
  55. sql+=" and sage = ?";
  56. params.add(keys.get("sage"));
  57. }
  58. if(!StringUtil.isNull(keys.get("saddress"))){
  59. sql+=" and saddress like ?";
  60. params.add("%"+keys.get("saddress")+"%");
  61. }
  62. sql+=" order by sid";
  63. try {
  64. //获取连接
  65. conn = DBUtil.getConnection();
  66. //预编译处理sql
  67. pst = conn.prepareStatement(sql);
  68. //设置参数
  69. for (int i = 0; i < params.size(); i++) {
  70. pst.setObject(i+1,params.get(i));
  71. }
  72. //执行sql获得数据
  73. rts = pst.executeQuery();
  74. //处理数据
  75. while (rts.next()){
  76. //建一个对象
  77. Student student = new Student();
  78. //将所有结果集中的值取出,赋给对象
  79. student.setSid(rts.getInt("sid"));
  80. student.setSname(rts.getString("sname"));
  81. student.setSgender(rts.getString("sgender"));
  82. student.setSage(rts.getInt("sage"));
  83. student.setSaddress(rts.getString("saddress"));
  84. //将对象放到容器内
  85. list.add(student);
  86. }
  87. } catch (SQLException e) {
  88. e.printStackTrace();
  89. }finally {
  90. //关流
  91. DBUtil.closeAll(conn,pst,rts);
  92. }
  93. return list;
  94. }
  95. /**
  96. * 新增学生
  97. *
  98. * @param student 新增的学生信息
  99. * @return 受影响行数
  100. */
  101. @Override
  102. public Integer insertStudent(Student student) {
  103. //给一个默认返回值
  104. Integer key = 0;
  105. try {
  106. //获得连接
  107. conn = DBUtil.getConnection();
  108. //写sql语句
  109. String sql = "insert into student1(sname,sgender,sage,saddress) values (?,?,?,?)";
  110. //预编译sql
  111. pst = conn.prepareStatement(sql);
  112. //将插入的值赋给占位符
  113. pst.setString(1,student.getSname());
  114. pst.setString(2,student.getSgender());
  115. pst.setInt(3,student.getSage());
  116. pst.setString(4,student.getSaddress());
  117. //交给executeUpdate执行,key接收受影响行数
  118. key = pst.executeUpdate();
  119. } catch (SQLException e) {
  120. e.printStackTrace();
  121. }finally {
  122. //关流
  123. DBUtil.closeAll(conn,pst,rts);
  124. }
  125. return key;
  126. }
  127. /**
  128. *修改
  129. * @param params 字符串集合
  130. * @return 受影响行数
  131. */
  132. @Override
  133. public Integer updateStudent(ArrayList<String> params) {
  134. //给一个默认返回值
  135. Integer key = 0;
  136. //编写sql语句
  137. String sql = "update student1 set sname = ?,sgender = ?," +
  138. "sage = ?,saddress = ? where sid = ?";
  139. //将controller传过来的字符串集合,和sql语句交给DBUtil的方法执行,用key接收受影响行数
  140. key = DBUtil.executeUpdate(sql,params);
  141. return key;
  142. }
  143. /**删除
  144. * @param sid 学生学号
  145. * @return 受影响行数
  146. */
  147. @Override
  148. public Integer deleteStudent(String sid) {
  149. Integer key = 0;
  150. if (!StringUtil.isNull(sid)){
  151. String sql = String.format("delete from student1 where sid in(%s)",sid);
  152. key = DBUtil.executeUpdate(sql,params);
  153. }
  154. return key;
  155. }
  156. }

test包

测试类

  1. package com.lzl.StudentManage.test;
  2. import com.lzl.StudentManage.controller.LoginController;
  3. import com.lzl.StudentManage.controller.StudentController;
  4. import java.util.Scanner;
  5. public class WebModel {
  6. static StudentController studentController = new StudentController();
  7. static LoginController loginController = new LoginController();
  8. static Scanner scanner = new Scanner(System.in);
  9. public static void main(String[] args) {
  10. System.out.println("============欢迎来到学生管理系统============");
  11. System.out.println("请您登陆");
  12. loginController.getLogin();
  13. }
  14. }

附上效果演示

演示CRUD

发表评论

表情:
评论列表 (有 0 条评论,109人围观)

还没有评论,来说两句吧...

相关阅读

    相关 用户登陆注册【JDBC版】

    前言 > 在讲解Web开发模式的时候,曾经写过XML版的用户登陆注册案例!现在在原有的项目上,使用数据库版来完成用户的登陆注册!如果不了解的朋友,可以看看我Web开发模式