1.启动mySQL
cmd命令提示符启动:用管理员权限运行命令提示符,输入net start mysql
任务管理器启动:打开任务管理器-服务 找到mySQL服务-右键启动
2.创建一个Maven项目
3.导入数据库-输入用户名和密码
4.遇到的报错
报错1:[08s01]链接失败,经排查是之前把数据库停掉了,重启即可
报错2:[password is expired]密码已过期
第一次设置好初始密码后,必须要在cmd登录数据库,重新设置一个新密码
重设密码命令
set password for root@localhost = password('123456');
5.链接数据库后在默认Console中配置表格样式-粘贴后全选运行
drop database if exists `demo`;
create database `demo` charset utf8mb4;
use `demo`;
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(10) DEFAULT NULL COMMENT '姓名',
`number` varchar(20) DEFAULT NULL COMMENT '学号',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='学生表';
6.创建git仓库,添加gitignore过滤文件
7.创建util包 pojo包 dao包 service包 controller包 test包
8.导入工具类JDBCDemo.java到util包下
运行工具类的测试方法 发现报错
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
解决方法在xml文件中添加坐标 刷新maven下载
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
</dependencies>
9.创建学生类Student继承Person类
package com.warschool.manager.pojo;
import com.warschool.manager.exec.NameToLongException;
public class Person {
/**
* id
*/
private Integer id;
/**
* 姓名
*/
private String name;
/**
* 学号
*/
private String number;
public Person() {
}
public Person(Integer id, String name, String number) {
this.id = id;
this.name = name;
this.number = number;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
if (name.length() > 4) {
throw new NameToLongException("名字太长了");
} else {
this.name = name;
}
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
@Override
public String toString() {
return id + "\t\t\t" + number + "\t\t\t" + name;
}
}
定义三个属性 id name number 定义构造方法 成员方法 和 toString
10.创建StudentDao接口对方法进行规范。DAO类的作用是从service层接收参数成对数据库的增删改查操作,并将数据返回给service
package com.warschool.manager.dao;
import com.warschool.manager.pojo.Student;
import java.util.ArrayList;
/**
* @author msi
*/
public interface Dao {
/**
* 添加学生方法
* @param name 传入姓名
* @param number 传入学号
* @return 返回列表
*/
boolean add(String name,String number);
/**
* 查找学生方法
* @return 返回学生列表
*/
ArrayList<Student> findAll();
/**
* 删除学生方法
*/
void delete(Integer id);
/**
* 清空
*/
void clearAll();
}
新建impl包建立实现类StudentDaoImpl,在实现类中
package com.warschool.manager.dao;
import com.warschool.manager.pojo.Student;
import com.warschool.manager.util.JDBCDemo;
import java.util.ArrayList;
public class StudentDaoImpl implements Dao {
/**
* 添加学生方法
*
* @param name 传入姓名
* @param number 传入学号
* @return 返回列表
*/
@Override
public boolean add(String name, String number) {
return JDBCDemo.add(name, number);
}
/**
* 查找学生方法
*
* @return 返回学生列表
*/
@Override
public ArrayList<Student> findAll() {
return JDBCDemo.select();
}
/**
* 删除学生方法
*
* @param id 索引id
*/
@Override
public void delete(Integer id) {
JDBCDemo.delete(id);
}
/**
* 清空
*/
@Override
public void clearAll() {
JDBCDemo.clearAll();
}
}
在实现类的重写方法中写入调用工具包的代码,将数据导入到数据库中,或者从数据库读取数据。
11.创建Service接口,Service类用于接受controller发来的数据并传递给Dao,并对数据进行判断处理。
package com.warschool.manager.service;
import com.warschool.manager.pojo.Student;
import java.util.ArrayList;
/**
* @author msi
*/
public interface Service {
/**
* 添加学生方法
* @param name 传入姓名
* @param number 传入学号
* @return 返回列表
*/
boolean add(String name,String number);
/**
* 查找学生方法
* @return 返回学生列表
*/
ArrayList<Student> findAll();
/**
* 删除犯法
* @param id 索引id
*/
void delete(Integer id);
/**
* 判断学号是否存在
* @param number 学号
* @return 返回集合索引值
*/
int yesNumber(String number);
/**
* 清空
*/
void clearAll();
}
新建impl包建立实现类StudentServiceImpl
在实现类的重写方法中将数据传递给Dao。
package com.warschool.manager.service;
import com.warschool.manager.dao.Dao;
import com.warschool.manager.dao.StudentDaoImpl;
import com.warschool.manager.pojo.Student;
import java.util.ArrayList;
/**
* @author msi
*/
public class StudentServiceImpl implements Service {
Dao dao = new StudentDaoImpl();
/**
* 添加学生方法
*
* @param name 传入姓名
* @param number 传入学号
* @return 返回列表
*/
@Override
public boolean add(String name, String number) {
return dao.add(name, number);
}
/**
* 查找学生方法
*
* @return 返回学生列表
*/
@Override
public ArrayList<Student> findAll() {
return dao.findAll();
}
/**
* 删除犯法
*
* @param id 索引id
*/
@Override
public void delete(Integer id) {
dao.delete(id);
}
/**
* 判断学号是否存在
*
* @param number 学号
* @return 返回集合索引值
*/
@Override
public int yesNumber(String number) {
ArrayList<Student> all = dao.findAll();
int index = -1;
if (all.size() == 0) {
return index;
}
for (int i = 0; i < all.size(); i++) {
Student stu = all.get(i);
if (stu.getNumber().equals(number)) {
index = i;
return index;
}
}
return index;
}
/**
* 清空
*/
@Override
public void clearAll() {
dao.clearAll();
}
}
12.创建Controller类 Controller类用于接收前端数据,并将数据传递传递给Service层,目前使用键盘录入
创建一个自定义异常用来判断用户输入姓名是否合法
package com.warschool.manager.exec;
public class NameToLongException extends RuntimeException {
/**
* Constructs a new exception with {@code null} as its detail message.
* The cause is not initialized, and may subsequently be initialized by a
* call to {@link #initCause}.
*/
public NameToLongException() {
}
/**
* Constructs a new exception with the specified detail message. The
* cause is not initialized, and may subsequently be initialized by
* a call to {@link #initCause}.
*
* @param message the detail message. The detail message is saved for
* later retrieval by the {@link #getMessage()} method.
*/
public NameToLongException(String message) {
super(message);
}
}
package com.warschool.manager.controller;
import com.warschool.manager.exec.NameToLongException;
import com.warschool.manager.pojo.Student;
import com.warschool.manager.service.Service;
import com.warschool.manager.service.StudentServiceImpl;
import java.util.ArrayList;
import java.util.Scanner;
/**
* @author msi
*/
public class StudentController {
static Service service = new StudentServiceImpl();
static Scanner sc = new Scanner(System.in);
public static void starMenu() {
//用来停止循环的旗标
boolean flag = true;
while (flag) {
System.out.println("------------学生管理系统---------------");
System.out.println("1 添加学生 2 查看学生 3 删除学生 4 返回上级");
System.out.println("请输入您的选择:");
String cho = sc.next();
switch (cho) {
case "1":
add();
break;
case "2":
findAll();
break;
case "3":
delete();
break;
case "4":
flag = false;
break;
default:
System.out.println("输入错误请重新输入");
break;
}
}
}
public static void findAll() {
ArrayList<Student> all = service.findAll();
if (all.size() == 0) {
System.out.println("找不到信息");
} else {
System.out.println("序号\t\t\t\t学号\t\t\t\t姓名");
//换行打印每个索引上的学生对象
for (int i = 0; i < all.size(); i++) {
System.out.println(all.get(i));
}
}
}
public static void add() {
System.out.println("请输入您要添加的学生学号");
String number = sc.next();
int i = service.yesNumber(number);
try {
if (i == -1) {
System.out.println("请输入您要添加的学生姓名");
String name = sc.next();
if (name.length() > 4) {
//当条件达成时抛出异常
throw new NameToLongException("名字过长错误");
}
service.add(name, number);
} else {
System.out.println("学号已存在,请重新输入");
}
//捕获异常
} catch (NameToLongException e) {
System.out.println(e);
}
}
public static void delete() {
findAll();
System.out.println("1 删除单个 2 删除全部");
System.out.println("请输入您的选择");
String cho1 = sc.next();
switch (cho1) {
case "1":
//数字格式异常处理方法
try {
System.out.println("请输入要删除的学生序号");
String str = sc.next();
int id = Integer.parseInt(str);
service.delete(id);
} catch (NumberFormatException e) {
System.out.println(e);
}
break;
case "2":
service.clearAll();
break;
default:
System.out.println("请重新输入");
break;
}
}
}
13,创建运行用的entry类
package com.warschool.manager.entry;
import com.warschool.manager.controller.StudentController;
import java.util.Scanner;
/**菜单
* @author msi
*/
public class InfoMangerEntry {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
boolean flag = true;
while (flag){
System.out.println("-----欢迎来到战争学院管理系统-----");
System.out.println("--1 学生管理 2老师管理 3 退出--");
System.out.println("请输入您的选择:");
String cho = sc.next();
switch (cho){
case "1":
StudentController.starMenu();
break;
case "2":
System.out.println("教师管理");
break;
case "3":
System.out.println("感谢您的使用");
flag =false;
break;
default:
System.out.println("请输入正确的选择");
break;
}
}
}
}
14.用git add . git commit -m ""代码提交到本地仓库
付工具包 JDBCdemo
package com.warschool.manager.util; import com.warschool.manager.pojo.Student; import java.sql.*; import java.util.ArrayList; /** * JDBC快速入门 */ public class JDBCDemo { /** * 创建学生表 * CREATE TABLE `student` ( * `id` int(11) NOT NULL AUTO_INCREMENT, * `name` varchar(10) DEFAULT NULL COMMENT '姓名', * `number` varchar(20) DEFAULT NULL COMMENT '学号', * PRIMARY KEY (`id`) * ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='学生表'; * * @param args * @throws Exception */ //TODO 先跑一下主方法 public static void main(String[] args) throws Exception { //清理数据库 clearAll(); // // 增加 add("刘一", "s20220315"); add("陈二", "s20220316"); add("张三", "s20220317"); add("李四", "s20220318"); add("王五", "s20220319"); add("赵六", "s20220320"); ArrayList<Student> list = select(); for (Student student : list) { System.out.println(student); } System.out.println("执行成功"); } /** * 增加学生 * * @param name 姓名 * @param number 学号 * @throws Exception * @return */ public static boolean add(String name, String number) { Connection conn = null; try { conn = getConnection(); //3. 定义sql String sql = "INSERT INTO `student`(`name`, `number`) VALUES ('" + name + "', '" + number + "')"; //4. 获取执行sql的对象 Statement Statement stmt = conn.createStatement(); //5. 执行sql int count = stmt.executeUpdate(sql); //6. 处理结果 if (count > 0) { System.out.println("执行成功"); } //7. 释放资源 stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } return false; } /** * 删除学生 * * @param id id * @throws Exception */ public static void delete(Integer id) { Connection conn = null; try { conn = getConnection(); //3. 定义sql String sql = "DELETE FROM student WHERE id = " + id; //4. 获取执行sql的对象 Statement Statement stmt = conn.createStatement(); //5. 执行sql int count = stmt.executeUpdate(sql); //6. 处理结果 if (count > 0) { System.out.println("执行成功"); } //7. 释放资源 stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 修改学生 * * @param id id * @param name 姓名 * @param number 学号 * @throws Exception */ public static void update(Integer id, String name, String number) { Connection conn = null; try { conn = getConnection(); //3. 定义sql String sql = "UPDATE `student` SET `name` = '" + name + "', `number` = '" + number + "' WHERE `id` = " + id; System.out.println("修改sql语句:" + sql); //4. 获取执行sql的对象 Statement Statement stmt = conn.createStatement(); //5. 执行sql int count = stmt.executeUpdate(sql); //6. 处理结果 if (count > 0) { System.out.println("执行成功"); } //7. 释放资源 stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 查询所有学生 * * @throws Exception */ public static ArrayList<Student> select() { ArrayList<Student> students = new ArrayList<>(); Connection conn = null; try { conn = getConnection(); //3. 定义sql String sql = "select * from student"; //4. 获取执行sql的对象 Statement Statement stmt = conn.createStatement(); //5. 执行sql ResultSet rs = stmt.executeQuery(sql); //6. 处理结果 // 6.1 光标向下移动一行,并且判断当前行是否有数据 while (rs.next()) { // 6.2获取数据 getXxx() int id = rs.getInt("id"); String name = rs.getString("name"); String number = rs.getString("number"); Student student = new Student(id, name, number); students.add(student); } //7. 释放资源 stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } return students; } public static void clearAll() { Connection conn = null; try { conn = getConnection(); //3. 定义sql String sql = "delete from student where 1=1;"; System.out.println("修改sql语句:" + sql); //4. 获取执行sql的对象 Statement Statement stmt = conn.createStatement(); //5. 执行sql int count = stmt.executeUpdate(sql); //6. 处理结果 if (count > 0) { System.out.println("执行成功"); } //7. 释放资源 stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection() { Connection conn = null; try { //1. 注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //2. 获取连接 String url = "jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=UTF8&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Hongkong"; String username = "root"; String password = "root"; conn = DriverManager.getConnection(url, username, password); } catch (Exception e) { e.printStackTrace(); } return conn; } }