前置条件
创建student表并添加示例数据
功能要求
代码实现
-
import java.sql.*;
-
import java.util.Scanner;
-
public class Main {
-
// 加载驱动
-
public final static String driver="com.mysql.cj.jdbc.Driver";
-
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;
-
static {
-
try {
-
// 设置连接对象
-
Class.forName(driver);
-
in=new Scanner(System.in);
-
} catch (ClassNotFoundException e) {
-
throw new RuntimeException("加载失败");
-
}
-
}
-
// 获取连接对象
-
public static Connection getConn(){
-
try{
-
// 返回连接对象
-
return DriverManager.getConnection(url,user,password);
-
} catch (SQLException e) {
-
e.printStackTrace();
-
}
-
return null;
-
}
-
// 添加数据
-
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("请输入需要添加的学生个数:");
-
int cnt=in.nextInt();
-
while(cnt-- > 0){
-
System.out.println("\n\n开始添加");
-
System.out.print("请输入学生姓名:");
-
ps.setString(1,in.next());
-
System.out.print("请输入学生电话:");
-
ps.setString(2,in.next());
-
System.out.print("请输入学生性别:");
-
ps.setString(3,in.next());
-
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 ";
-
ps=conn.prepareStatement(sql);
-
ps.executeLargeUpdate();
-
System.out.println("操作成功");
-
return;
-
} case "3" : {
-
System.out.print("请输入需要删除学生的姓名:");
-
sql="delete from student where name = ? ";
-
break;
-
} case "4" : {
-
sql="delete from student";
-
} case "6" : {
-
System.out.println("退出成功!");
-
return;
-
}
-
default:{
-
System.out.println("请重新选择");
-
break;
-
}
-
}
-
ps=conn.prepareStatement(sql);
-
if(!"4".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退出成功!");
-
conn.close();
-
}