前置条件
创建student表并添加示例数据
功能要求
写Java 代码 (要求只用 PreparedStatement 对象,变化的值都用?代替)
- 查询 student 表中所有学生信息a
- student 表中新增三条数据
- 查询 student 表中电话以 182 开头的所有学生信息 (SQL 要用到模糊查询 like)
- c修改 student 表中第 5 条数据,电话改为“13124235300
- 查询 student 表中所有男性的学生信息
- 修改 student 表中第 10 条数据,姓名改为“大帅哥
- 查询 student 表中电话以 139 开头的所有学生信息 (SQL 要用到模糊查询 like)
- 删除 student 表中第 3 条数据
- 查询 student 表中所有女性的学生信息
- 查询 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();
}
}