前置条件
创建student表并添加示例数据
功能要求
代码实现
import java.sql.*;
import java.util.Scanner;
public class Main {
// 加载驱动
public final static String driver="com.mysql.cj.jdbc.Driver"; // 驱动类Driver在jar包中位置
public final static String url="jdbc:mysql://localhost:3306/javasql";
/*
定义了一个公共的、最终的(即不能被重新赋值)、且是静态的字符串变量,名为'url'。
它的值是"jdbc:mysql://localhost:3306/javasql",
这通常是一个连接到MySQL数据库的JDBC(Java Database Connectivity)URL。
这个URL指定了如何连接到位于本地主机(localhost)的MySQL数据库服务器(端口号为3306),
以及要连接到的数据库名称为'javasql'。
*/
public final static String user="root"; // 用户名
public final static String password="654321";
static Connection conn;
static Scanner in;
private static String[] regexS; // 正则表达式
// 静态代码块
static {
try {
// 设置连接对象
Class.forName(driver);
in=new Scanner(System.in);
regexS=new String[]{
"^(?:[\\u4e00-\u9fa5·]{2,16})$",
"[1-9]\\d{10}",
"[男,女]"
};
/*
* 0:验证姓名
* 1:验证电话
* 2:验证性别
* */
} catch (ClassNotFoundException e) {
throw new RuntimeException("加载失败");
}
}
// 获取连接对象
public static Connection getConn(){
try{
// 返回连接对象
return DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/*
* 校验函数
* 形参:
* target:只开辟一个空间的数组,用于将需要校验的信息传入,并将校验成功后的结果带回
* distinguish:区分当前正在校验的信息类型
* 返回值:表示信息输入是否完成 true为完成 false为未完成
* */
public static boolean verify(String[] target,String distinguish){
int index=0; // 需要使用到的正则表达式
String hint=null;
// 根据形参来区分不同的提示信息
switch (distinguish){
case "姓名" : index=0; hint="输入的学生姓名有误,请符合规则输入!规则:至少为两个字且长度不超过16位的汉字"; break;
case "电话" : index=1; hint="输入的学生电话号码有误,请符合规则输入!规则:不能以0开头且长度为11位纯数字手机号码"; break;
case "性别" : index=2; hint="输入的学生性别有误,请符合规则输入!规则:男/女 "; break;
}
// 判断当前数据是否符合相应得正则表达式
while( !target[0].matches(regexS[index]) ){
System.out.printf("\n%s\n",hint);
System.out.print("\n是否继续输入?(yes/no):");
if(!"yes".equals(in.next())) { System.out.println("\n已退出添加"); return false; }
System.out.printf("\n请正确输入%s:",distinguish);
target[0]=in.next();
}
return true;
}
// 添加数据
public static void insert() throws SQLException {
System.out.println("\n\n-------插入数据-----------");
String sql="insert into student values(null,?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
System.out.print("请输入需要添加的学生个数(0退出):");
int cnt=in.nextInt();
while(cnt-- > 0){
System.out.println("\n\n开始添加\n\n");
String[] val=new String[1]; // 用于信息的传入与结果的带回
// 姓名模块
System.out.print("请输入学生姓名:");
val[0]=in.next();
if( !verify(val,"姓名") ){ break; } // 验证学生姓名是否正确输入
ps.setString(1,val[0]);
// 电话模块
System.out.print("请输入学生电话号码:");
val[0]=in.next();
if( !verify(val,"电话")){ break; } // 验证学生电话是否正确输入
ps.setString(2,val[0]);
// 性别模块
System.out.print("请输入学生性别:");
val[0]=in.next();
if( !verify(val,"性别") ) { break; } // 验证学生电话是否正确输入
ps.setString(3,val[0]);
ps.executeLargeUpdate(); // 执行sql语句
System.out.println("添加成功");
}
ps.close();
return;
}
// 查询数据
public static void inquire() throws SQLException {
System.out.println("\n\n-------查询数据-----------");
System.out.println("1、根据姓名查询 \t\t\t\t 2、根据性别查询");
System.out.println("3、根据电话查询 \t\t\t\t 4、根据电话前缀查询");
System.out.println("5、查询所有数据");
System.out.println("其他输入:退出");
System.out.print("\n请输入你的选择:");
String sql=null;
String choose=in.next();
switch (choose){
case "1" : {
System.out.print("请输入需要查询的学生姓名:");
sql = "select * from student where name = ?"; // sql语句
break;
} case "2" : {
System.out.print("请输入需要查询的性别:");
sql = "select * from student where sex = ?"; // sql语句
break;
} case "3" : {
System.out.print("请输入需要查询的电话号码:");
sql = "select * from student where tel = ?"; // sql语句
break;
} case "4" : {
System.out.print("请输入需要查询的电话号码前缀(注意需要以%为结尾):");
sql = "select * from student where tel like ? "; // sql语句
break;
} case "5" : {
sql="select * from student";
break;
}
default:
System.out.println("退出查询!");
return;
}
PreparedStatement ps=conn.prepareStatement(sql); // 生成预编译sql语句的对象
if(!"5".equals(choose)) ps.setString(1, in.next());
byte flag=0;
ResultSet res = ps.executeQuery(); // 返回查询后的结果
while(res.next()){
flag=0x01;
System.out.print("学号:"+res.getInt(1)+"\t");
System.out.print("姓名:"+res.getString(2)+"\t");
System.out.print("电话:"+res.getString(3)+"\t");
System.out.println("性别:"+res.getString(4));
}
if(0 == flag){
System.out.println("查无此记录");
}else {
System.out.println("查询成功!");
}
res.close();
ps.close();
return;
}
// 删除数据
public static void delete() throws SQLException{
System.out.println("\n-------删除数据---------");
System.out.println("1、根据id删除 \t\t\t\t 2、根据表中位置删除");
System.out.println("3、根据姓名删除 \t\t\t\t 4、清空所有学生数据");
System.out.println("6、退出操作");
String sql=null;
PreparedStatement ps=null;
System.out.print("请输入你的选择:");
String choose=in.next();
switch (choose){
case "1" : {
System.out.print("请输入需要删除学生的id:");
sql="delete from student where id = ? ";
break;
} case "2" : {
// 连续执行两次语句
System.out.print("请输入需要删除第表中第几条数据:");
sql="set @tmp=(select id from student limit ?,1); ";
ps = conn.prepareStatement(sql);
ps.setInt(1,(in.nextInt()-1));
ps.executeLargeUpdate();
sql="delete from student where id=@tmp ";
break;
} case "3" : {
System.out.print("请输入需要删除学生的姓名:");
sql="delete from student where name = ? ";
break;
} case "4" : {
sql="delete from student";
}
default:{
System.out.println("退出成功");
return;
}
}
ps=conn.prepareStatement(sql);
if(!"4".equals(choose) && !"2".equals(choose)) { ps.setString(1,in.next()); }
ps.executeLargeUpdate(); //执行语句
System.out.println("删除成功");
ps.close();
return;
}
// 修改数据
public static void amend() throws SQLException{
System.out.println("------修改数据--------");
System.out.println("1、修改表中某一位学生的姓名 \t\t\t\t 2、修改表中某一位学生的电话");
System.out.println("其他:退出");
String sql=null;
PreparedStatement ps=null;
System.out.print("\n请输入你的选择:");
String choose=in.next();
if(!("1".equals(choose) || "2".equals(choose))) { System.out.println("退出成功!"); return; }
sql="set @tmp=(select id from student limit ? , 1) ";
System.out.print("请输入修改的第几条数据:");
ps=conn.prepareStatement(sql);
ps.setInt(1,(in.nextInt()-1));
ps.executeLargeUpdate();
switch (choose){
case "1" : {
System.out.print("请输入修改后的姓名:");
sql="update student set name= ? where id=@tmp";
break;
} case "2" : {
System.out.print("请输入修改后的电话:");
sql="update student set tel= ? where id=@tmp";
break;
}
}
ps=conn.prepareStatement(sql);
ps.setString(1,in.next());
ps.executeLargeUpdate();
ps.close();
System.out.println("操作成功!");
return;
}
public static void main(String[] args) throws SQLException {
conn=getConn();
boolean flag=true;
while(flag){
System.out.println("\n----------学生信息管理--------------\n");
System.out.println("1、添加操作 \t\t\t\t 2、查询操作");
System.out.println("3、删除操作 \t\t\t\t 4、修改操作");
System.out.println("5、退出");
System.out.print("\n请输入你的选择:");
switch (in.next()){
case "1" : insert(); break; // 添加
case "2" : inquire();break; // 查询
case "3" : delete();break; // 删除
case "4" : amend();break; // 修改
case "5" : flag=false; break;
default: System.out.println("请重新输入!"); break;
}
}
System.out.println("\n退出成功!");
in.close();
conn.close();
}
}