涉及到的技术参考链接汇总:
- Java连接MySQL数据库——含详细步骤和代码,参考链接:https://www.cnblogs.com/town123/p/8336244.html
- MySQL——Java 访问 MySQL 数据库 参考链接:https://blog.csdn.net/qq_41573234/article/details/80618303
- Java 中的resultset详解 参考链接:https://www.cnblogs.com/cai662009/p/8046407.html
``
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
public class Student {
//声明变量 用来保存数据库中的数据
int sid;
String sname;
int sage;
String smajor;
//程序的主入口
public static void main(String[] args) {
//数据的url 用户名 密码
String url="jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf-8";//本地ip:127.0.0.1;Mysql:3306;student库
String username="root";//数据库默认用户名root
String password="MYSQL";//mysql数据库密码
//加载数据库驱动 使用java的反射原理
try {
Class.forName("com.mysql.jdbc.Driver");
}catch (ClassNotFoundException e) {
// TODO: handle exception
e.printStackTrace();
}
Connection conn=null;//定义连接
//解决操作者使用键盘输入为对应选择的问题
//使用文本扫描
Scanner input = new Scanner(System.in);
boolean bool=true;//控制第一层循环节点
while(bool) {
System.out.println("=====欢迎来到**学院学员信息管理系统=====");
System.out.println("*************请选择具体操作**************\n*\t\t1:登录\t\t\t*\n*\t\t2:注册\t\t\t*\n*\t\t3:退出\t\t\t*\n*\t\t其他:请重新选择\t\t*");
System.out.println("*****************************************");
System.out.println("请选择具体操作:");
//使用文本扫描器,获取键盘输入的数据
int innum=input.nextInt();//获取键盘输入的数字
//根据选择执行不同操作
switch (innum) {
case 1:
System.out.println("输入登录账号");
//登录,用户名,密码为字符串
//使用文本扫描器获取键盘输入的字符串 使用字符串类型的变量来保存
System.out.println("请输入用户名");
String user=input.next();
System.out.println("请输入密码");
String pass=input.next();
/*判断输入用户名和密码是否正确
* 将输入的用户名和密码放入user表中进行匹配
* 如果可以查到代表用户名正确*/
String boolName=null;
try {
conn = DriverManager.getConnection(url, username, password);
String sql="select * from user where username=? and password=md5(?)";//md5用来加密,数据库user表中password值为加密后的值
PreparedStatement ps=conn.prepareStatement(sql);//
ps.setString(1,user);
ps.setString(2,pass);
ResultSet rt =ps.executeQuery();//ResultSet:结果集
//使用变量类检测是否查到对应的信息
while (rt.next()) {
boolName=rt.getString("username");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(boolName==null) {
System.out.println("你的用户名和密码不存在");
}else {
//在当前位置进行stu表的增删改查操作的循环
boolean bool2=true;
while(bool2) {
System.out.println("========请选择你对学生信息执行什么样的操作=======");
System.out.println("* 1、查看所有学生信息 *");
System.out.println("* 2、通过学号修改信息 *");
System.out.println("* 3、通过学号删除信息 *");
System.out.println("* 4、增加一个学生信息 *");
System.out.println("* 5、返回上级登录界面 *");
System.out.println("* '输入任意值退出程序' *");
System.out.println("=================================================");
//使用文本扫描器获取管理员的选择(数字)
int StuCaoZao=input.nextInt();
switch (StuCaoZao) {
case 1:
System.out.println("1、查看所有学生信息");
//连接数据库 将所有学生信息查询到,并输出到控制台
//创建一个数组来保存数据库中的所有数据 以对象的形式保存
Student[] stuArr=new Student[10];
try {
//查询数据库中所有数据的语句
String sql="select * from stu";
//预编译
PreparedStatement ps= conn.prepareStatement(sql);
//执行 之后获得结果集 结果集理解为容器
ResultSet rt=ps.executeQuery();
//遍历结果集中的数据
System.out.println("编号"+"\t\t姓名"+"\t\t年龄"+"\t\t专业");
while(rt.next()) {//蓄奴化一次表示有一行数据
//循环获取数据库中的每一行数据中的每一个字段的值
//每一次当得数据库中的一行有效数据 创建一个student对象来保存
Student stu=new Student();
stu.sid=rt.getInt("sid");
stu.sname=rt.getString("sname");
stu.sage=rt.getInt("sage");
stu.smajor=rt.getString("smajor");
//得到一行输出一行数据
System.out.println(stu.sid+"\t\t"+stu.sname+"\t\t"+stu.sage+"\t\t"+stu.smajor);
}
ps.close();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
};
break;
case 2:
System.out.println("2、根据学生学号修改学生姓名");
System.out.println("请输入要修改学生的学号:");
int sid=input.nextInt();
System.out.println("请修改学生姓名:");
String sname=input.next();
try {
//sql语句
String sql="UPDATE stu SET sname=? WHERE sid=?";
//预编译
PreparedStatement ps= conn.prepareStatement(sql);
//对占位符赋值
ps.setString(1,sname);
ps.setInt(2, sid);
//获取执行结果
int num=ps.executeUpdate();
ps.close();
if (num>0) {
System.out.println("数据修改成功");
}else {
System.out.println("数据修改失败");
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
};
break;
case 3:
System.out.println("3、根据学生学号删除学生信息");
System.out.println("删除该学生信息的学生学号:");
int dsid=input.nextInt();
try {
//sql语句
String sql="DELETE FROM stu WHERE sid=?";
//预编译
PreparedStatement ps= conn.prepareStatement(sql);
//对占位符赋值
ps.setInt(1,dsid);
//获取执行结果
int num=ps.executeUpdate();
ps.close();
if (num>0) {
System.out.println("数据删除成功");
}else {
System.out.println("数据删除失败");
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
};
break;
case 4:
System.out.println("4、增加学生信息");
System.out.println("请输入学生姓名:");
String isname=input.next();
System.out.println("请输入学生年龄:");
int isage=input.nextInt();
System.out.println("请输入学生专业:");
String ismajor=input.next();
try {
//sql语句
String sql="INSERT INTO stu(sname,sage,smajor) VALUES(?,?,?)";
//预编译
PreparedStatement ps= conn.prepareStatement(sql);
//给占位符赋值
ps.setString(1,isname);
ps.setInt(2, isage);
ps.setString(3, ismajor);
//获取执行结果
int num=ps.executeUpdate();
ps.close();
if (num>0) {
System.out.println("数据添加成功");
}else {
System.out.println("数据添加失败");
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
};
break;
case 5:
System.out.println("返回上一级首页");
//此处是返回到登录页面
bool2=false;
break;
default:
System.out.println("退出程序,欢迎下次使用");
bool2=false;
bool=false;
break;
}//switch
}//while
}//else
break;
case 2:
System.out.println("请进行注册");
System.out.println("请输入你注册的用户名:");
String userName=input.next();
System.out.println("请输入你注册的密码:");
String userPass=input.next();
//通过给user表增加数据来注册
try {
conn = DriverManager.getConnection(url, username, password);
String sql="insert into user(username,password) values(?,md5(?))";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1,userName);
ps.setString(2,userPass);
int insertUserNum=ps.executeUpdate();
if (insertUserNum>0) {
System.out.println("用户新增成功");
}else {
System.out.println("用户新增失败");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case 3:
System.out.println("退出程序,欢迎下次使用");
bool=false;
break;
default:
System.out.println("输入错误,请重新选择");
break;
}//switch
}//while
}//main
}//class Student
#如果数据库存在就删除
DROP DATABASE IF EXISTS stu ;
#创建数据库 stu 字符编码默认utf-8
CREATE DATABASE IF NOT EXISTS stu DEFAULT CHARSET utf8;
USE stu;
#创建数据库中的表 user 和student
#user 表中有UID字段 username password字符(密码使用md5加密函数进行加密)
CREATE TABLE USER(
uid INT AUTO_INCREMENT PRIMARY KEY ,
username VARCHAR(30) NOT NULL,
PASSWORD VARCHAR(100)
);
#创建stu表 字段有 sid sname sage smajor
CREATE TABLE student(
sid INT AUTO_INCREMENT PRIMARY KEY ,
NAME VARCHAR(20) NOT NULL,
age INT ,
major VARCHAR(50)
);
#给user表中添加数据 用户名为admin 密码为123456 密码需要加密
INSERT INTO USER(username,PASSWORD) VALUES('admin',MD5('123456'));
#给student表添加数据
INSERT INTO student(NAME,age,sex,major)
VALUES('张三',18,'男','计算机科学'),
('李四',20,'女','网络工程'),
('王五',22,'男','数学');