/*
	 * jdbc步骤
	 * 1、加载数据驱动
	 * 2、通过DriverManager获取数据库连接对象
	 * 3、通过Connection创建Statement对象1)creatStatement()基本创建2)prepareStatement(String sql)根据传入SQL语句创建预编译的Statement对象
	 * 4、使用Statement执行SQL语句1)execute可任何语句 比较麻烦2)executeUpdate()主要执行DML(受影响行数)、DDL语句(返回0)3)executeQuery只能执行查询语句,执行后返回代表查询的ResultSet对象
	 * 5、操作结果集,如果执行是查询语句,执行结果将返回一个Result对象,该对象保存sql语句查询结果
	 * 6、回收数据库资源
	 */
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.AttributedString;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.concurrent.CountDownLatch;
import java.util.jar.Attributes.Name;

import javax.management.loading.PrivateClassLoader;

public class Test {
    /*查询用Statement接口和executeQuery
     *修改用PreparedStatement子接口和executeUpdate
     */
	public static Connection mysqlConnection() throws SQLException{//抛出SQL类异常	 数据库连接方法
		final String url = "jdbc:mysql://localhost:3306/test_java?serverTimezone=GMT";//数据库url
		final Connection conn=DriverManager.getConnection(url, "root","ler210023");//DriverManager应用程序与数据库建立连接 尝试建立到给定的数据库url的连接
		return conn;}
	/*
	 * sql查询管理员名称是否已被注册
	 */
	public static boolean mysqlCheck1(String name) throws SQLException  {
		boolean flag=false;
		Connection conn=mysqlConnection();//调用方法 负责与特定的数据库连接
		Statement smt=null;//封装调用SQL语句对数据库进行访问的各类操作 提供执行SQL语句和获取数据库在执行完成后的返回结果
		smt=conn.createStatement();//coonnection方法创建一个 Statement 对象,封装 SQL 语句发送给数据库,通常用来执行不带参数的 SQL 语句。
		//mysql语句
		String sql="SELECT * FROM adminers";
		//将返回值传给rs
		ResultSet rs=smt.executeQuery(sql);//Statement的executeQuery()方法来下达select指令以查询数据库 返回一个ResultSet对象
		while(rs.next()) {//将光标从当前位置向前移动一行
			String name1=rs.getString("name");
			String password1=rs.getString("password");
			if(name1.equals(name)) {//输入正确
				return flag;//输入正确 返回false
			}
		}
		smt.close();
		rs.close();
		flag=true;
		return flag;//输入错误返回true
	}
	/*
	 * sql查询管理员 输入是否正确
	 */
	public static boolean mysqlCheck1(String name,String password) throws SQLException  {
		boolean flag=false;
		Connection conn=mysqlConnection();//调用方法
		Statement smt=null;
		smt=conn.createStatement();//创建一个 Statement 对象,封装 SQL 语句发送给数据库,通常用来执行不带参数的 SQL 语句
		//mysql语句
		String sql="SELECT * FROM adminers";
		ResultSet rs=smt.executeQuery(sql);//executeQuery()方法来下达select指令以查询数据库
		while(rs.next()) {
			String name1=rs.getString("name");
			String password1=rs.getString("password");
			if(name1.equals(name)&&password1.equals(password)) {//输入都正确
				return flag;//输入正确 返回false
			}
		}
		smt.close();
		rs.close();
		flag=true;
		return flag;//输入错误返回true
	}
	
	/*
	 * sql插入注册管理员
	 */
	public static void mysqlInsert1(String name,String password) throws SQLException {//抛出SQL类异常

		//连接数据库
		Connection conn=mysqlConnection();
		//PreparedStatement继承Statement prepareStatement对象防止sql注入的方式是把用户非法输入的单引号用\反斜杠做了转义,从而达到了防止sql注入的目的,安全性高
		//可执行带参数的SQL语句,用?代替,其后对其进行赋值
		PreparedStatement smt=null;
		//判断单号是否已被使用		
		String sql="insert into adminers(name,password)values(?,?)";//?会被作为参数传入
		smt=conn.prepareStatement(sql);//SQL 语句被预编译并存储在 PreparedStatement 对象中。
		smt.setString(1, name);//将指定的参数设置为给定参数的值
		smt.setString(2, password);

		int result=smt.executeUpdate();//executeUpdate()是PreparedStatement对象众多的抽象方法中的一个 返回受影响的记录条数 返回值为int
		if(result==1) {//判断插入数据成功
			System.out.println("注册成功!");
		}
		else {
			System.out.println("注册失败!");
		}
		smt.close();//关闭资源,释放内存
	}
	/*
	 * 注册管理员
	 */
	public static void add1() throws SQLException{
		Scanner input=new Scanner(System.in);
		System.out.println("请输入名字:");
		String name=input.next();
		System.out.println("请输入密码:");
		String password=input.next();
		boolean flag=mysqlCheck1(name);//检索名字是否被使用
		if(flag==false) {//重复 返回flase 
			System.out.println("你已注册,请登陆");
		}
		else{
			mysqlInsert1(name,password);
	}}

	/*
	 * sql查询用户名称是否已被注册
	 */
	public static boolean mysqlCheck2(String name) throws SQLException  {
		boolean flag=false;
		Connection conn=mysqlConnection();
		Statement smt=null;
		smt=conn.createStatement();
		//mysql语句
		String sql="SELECT * FROM users";
		//将返回值传给rs
		ResultSet rs=smt.executeQuery(sql);
		while(rs.next()) {
			String name1=rs.getString("name");
			if(name1.equals(name)) {//输入重复
				return flag;//返回false
			}
		}
		flag=true;
		return flag;//为重复返回true
	}
	/*
	 * sql查询用户输入是否正确
	 */
	public static boolean mysqlCheck2(String name,String password) throws SQLException  {
		boolean flag=false;
		Connection conn=mysqlConnection();
		Statement smt=null;
		smt=conn.createStatement();
		//mysql语句
		String sql="SELECT * FROM users";
		ResultSet rs=smt.executeQuery(sql);
		while(rs.next()) {
			String name2=rs.getString("name");
			String password2=rs.getString("password");
			if(name2.equals(name)&&password2.equals(password)) {//检索输入是否正确
				return flag;//输入正确返回false
			}
		}
		flag=true;
		return flag;//输入错误返回true
	}
	/*
	 * sql插入注册用户
	 */
	public static void mysqlInsert2(String name,String password) throws SQLException {//抛出SQL类异常
		Connection conn=mysqlConnection();
		PreparedStatement smt=null;
		String sql="insert into users(name,password)values(?,?)";//?会被作为参数传入
		smt=conn.prepareStatement(sql);
		smt.setString(1, name);//设置
		smt.setString(2, password);

		int result=smt.executeUpdate();//executeUpdate()是PreparedStatement对象众多的抽象方法中的一个 返回受影响的记录条数 返回值为1或0
		if(result==1) {//判断插入数据成功
			System.out.println("注册成功!");
		}
		else {
			System.out.println("注册失败!");
		}
		smt.close();//关闭资源,释放内存
	}


	/*
	 * 注册用户
	 */
	public static void add2() throws SQLException{
		Scanner input=new Scanner(System.in);
		System.out.println("请输入名字:");
		String name=input.next();
		System.out.println("请输入密码:");
		String password=input.next();
		boolean flag=mysqlCheck2(name);//调用方法 检索名字是否被使用
		if(flag==false) {//重复 返回flase 
			System.out.println("你已注册,请登陆");
		}
		else{
			mysqlInsert2(name,password);
	}
	}
	/*
	 * 查询快递表检索快递单号是否被使用
	 */
	public static boolean mysqlCheck(String number) throws SQLException  {
		boolean flag=false;
		Connection conn=mysqlConnection();
		Statement smt=null;
		smt=conn.createStatement();
		//mysql语句
		String sql="SELECT * FROM express";
		ResultSet rs=smt.executeQuery(sql);
		while(rs.next()) {
			String number1=rs.getString("number");
			if(number1.equals(number)) {//比较查询的单号与输入的单号判断单号是否已被使用
				flag=true;
				return flag;//已被使用返回true
			}
		}
		return flag;//未被使用返回flag
	}
	/*
	 * sql输入快递信息
	 */
	public static void mysqlInsert(String number,String a_date,String t_date,String K_name) throws SQLException {//抛出SQL类异常
		boolean flag=mysqlCheck(number);//调用方法 判断是否单号被使用
		if(flag) {//真,则已被使用
			System.out.println("该单号已被使用");
		}
		//未被使用
		else {
		Connection conn=mysqlConnection();
		//表示一条预编译过的 SQL 语句
		PreparedStatement smt=null;	
		String sql="insert into express(number,a_date,t_date,k_name)values(?,?,?,?)";//?会被作为参数传入
		smt=conn.prepareStatement(sql);
		smt.setString(1, number);//对参数进行设置
		smt.setString(2, a_date);
		smt.setString(3, t_date);
		smt.setString(4, K_name);
		int result=smt.executeUpdate();
		if(result==1) {//判断插入数据成功
			System.out.println("分配快递成功");
		}
		else {
			System.out.println("分配快递失败");
		}
		smt.close();//关闭资源,释放内存
	}
	}
	/*
	 * 添加快递信息
	 */
	public static void add() throws SQLException{
		Scanner input=new Scanner(System.in);
		while(true) {
		System.out.println("温馨提示:输入任意数字表示添加快递,0为不添加");
		if(input.nextInt()==0) {
			break;
		}
		else {	
		System.out.println("请输入快递单号:");
		String number=input.next();
		System.out.println("请输入快递到达时间:");
		String a_date=input.next();
		System.out.println("请输入快递提取时间:");
		String t_date=input.next();
		System.out.println("请输入快递的所属人的名称:");
		String k_name=input.next();
		mysqlInsert(number, a_date, t_date, k_name);
	}}}
	/*
	 * 查询所有快递
	 */
	public static void mysqlShow() throws SQLException {
		Connection conn=mysqlConnection();
		Statement smt=null;
		smt=conn.createStatement();
		String sql="SELECT * FROM express";
		ResultSet rs=smt.executeQuery(sql);
		//循环输出快递信息
		while(rs.next()) {
			System.out.println("单号:"+rs.getString("number")+"到达日期:"+rs.getString("a_date")+"提取日期"+rs.getString("t_date")+"姓名:"+rs.getString("k_name"));
		}
		rs.close();
		smt.close();
	}
	/*
	 * sql更新快递信息
	 */
	public static void mysqlUpdate(String number1,String number,String a_date,String t_date,String k_name) throws SQLException {
		Connection conn=mysqlConnection();
		PreparedStatement smt=null;
		String sql="update express set number=?,a_date=?,t_date=?,k_name=? where number=?";//?会被作为参数传入
		smt=conn.prepareStatement(sql);
		smt.setString(1, number);//输入修改信息
		smt.setString(2, a_date);
		smt.setString(3, t_date);
		smt.setString(4, k_name);
		smt.setString(5, number1);//原单号
		int result=smt.executeUpdate();
		if(result==1) {//判断插入数据成功
			System.out.println("快递修改成功");
		}
		else {
			System.out.println("快递修改失败");
		}
		smt.close();
	}

	/*
	 * 修改快递信息
	 */
	public static void alter() throws SQLException {
		Scanner input=new Scanner(System.in);
		System.out.println("请输入要修改的快递单号:");//原单号
		String number1=input.next();
		System.out.println("请输入新的快递单号:");//新单号
		String number=input.next();
		System.out.println("请输入快递到达时间:");
		String a_date=input.next();
		System.out.println("请输入快递提取时间:");
		String t_date=input.next();
		System.out.println("请输入快递的所属人的名称:");
		String k_name=input.next();
		mysqlUpdate(number1,number, a_date, t_date, k_name);//调用更新方法
	}
	/*
	 * sql中查看自己的快递
	 */
	public static void sqlFind(String name) throws SQLException {
		Connection conn=mysqlConnection();
		Statement smt=null;
		smt=conn.createStatement();
		String sql="SELECT * FROM express";
		ResultSet rs=smt.executeQuery(sql);
		//循环输出快递信息
		int  count=0;
		while(rs.next()) {
			String k_name=rs.getString("k_name");
			if(k_name.equals(name)) {
				System.out.println("请及时取件");
				System.out.println("单号:"+rs.getString("number")+"到达日期:"+rs.getString("a_date")+"提取日期"+rs.getString("t_date")+"姓名:"+rs.getString("k_name"));
				count++;
			}	
		}
		if(count==0) {
			System.out.println("暂无你的快递");
		}
		smt.close();
		rs.close();
		}
	/*
	 * 查询快递
	 */
	public static void findName() throws SQLException {
		Scanner input=new Scanner(System.in);
		System.out.println("请输入你的姓名");
		String name=input.next();
		sqlFind(name);
	}
	/*
	 * sql中删除自己的快递
	 */
	public static void sqlDelete(String number) throws SQLException {
		Connection conn=mysqlConnection();
		PreparedStatement smt=null;
		String sql="delete from express where number=?";//?会被作为参数传入
		smt=conn.prepareStatement(sql);
		smt.setString(1, number);
		int result=smt.executeUpdate();//对于CREATETABLE或DROPTABLE等不操作行的语句,executeUpdate的返回值总为零
		if(result!=0) {
			System.out.println("取件成功!");
		}
		else {
			System.out.println("取件失败!");
		}
		smt.close();
	}
	/*
	 * 领取快递
	 */
	public static void takeAway() throws SQLException {
		Scanner input=new Scanner(System.in);
		System.out.println("请输入你的快递单号");
		String number=input.next();
		sqlDelete(number);
	}
	
	
	public static void main(String[] args) throws SQLException {
		// TODO Auto-generated method stub
		/*
		 * 驱动
		 */
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (Exception e) {
			e.printStackTrace();//打印输出异常
		}
		Scanner input=new Scanner(System.in);
		Views v=new Views();
		//欢迎
		v.welcome();
		while(true) {
			//主菜单
			int menu=v.menu();
			switch (menu) {
			case 0://退出
				System.out.println("欢迎下次光临!");
				return;
			case 1://注册管理员
				add1();
				break;
				
			case 2://注册普通用户
				add2();
				break;
			case 3://管理员登陆
				System.out.println("登陆请输入姓名:");
				String n1=input.nextLine();
				System.out.println("请输入密码:");
				String p1=input.nextLine();
				boolean flag1=mysqlCheck1(n1,p1);//检索是否输入正确
				if(flag1) {//输入错误 返回true
					System.out.println("输入错误");
					break;
				}
				//输入正确
				else {
					System.out.println("登陆成功");
				while(true) {
					int gmenu=v.gMenu();
					switch(gmenu) {
					case 0://退出
						return;
					case 1://分配快递
						add();
						break;
					case 2://查看所有快递
						System.out.println("所有快递如下:");
						mysqlShow();
						break;
					case 3://修改快递
						alter();
						break;}
					if(gmenu==4)//返回上一步
						break;}
				}
				break;
			case 4://普通用户登录
				System.out.println("登陆请输入姓名:");
				String n2=input.nextLine();
				System.out.println("请输入密码:");
				String p2=input.nextLine();
				boolean flag2=mysqlCheck2(n2,p2);
				if(flag2) {//真,即输入错误
					System.out.println("输入错误");
					break;
				}
				//输入正确
				else{
					System.out.println("登陆成功");
				while(true) {
				int pmenu=v.pMenu();
				switch(pmenu) {
				case 0://退出
					return;
				case 1://查看快递
					findName();
					break;	
				case 2://取走快递
					takeAway();
					break;}
				if(pmenu==3)//返回上一步
					break;}
				}
				break;
			}



		}
}}
/*
	 * 管理员菜单
	 */
	public int gMenu() {
		System.out.println("------你好,管理员-------");
		System.out.println("1.快递分配");
		System.out.println("2.查看所有快递");
		System.out.println("3.修改快递信息");
		System.out.println("4.返回上一步");
		System.out.println("0.退出");
		System.out.println("---------------------");
		System.out.println("请根据提示,选择业务");
		int c=input.nextInt();
		if(c<0||c>4) {//输入异常
			System.out.println("输入异常,请重新输入");
			return gMenu();
		}
		return c;
	}
	/*
	 * 用户菜单
	 */
	public int pMenu() {
		System.out.println("------你好,用户员-------");
		System.out.println("请根据提示,输入功能序号");
		System.out.println("1.查看有否有快递");
		System.out.println("2.取走快递");
		System.out.println("3.返回上一步");
		System.out.println("0.退出");
		System.out.println("---------------------");
		int c=input.nextInt();
		if(c<0||c>3) {//输入异常
			System.out.println("输入异常,请重新输入");
			return pMenu();
		}
		return c;
	}

}

附数据库

mysql快递管理系统_System

CREATE TABLE `adminers` (
  `name` varchar(10) NOT NULL COMMENT 'name',
  `password` varchar(10) DEFAULT NULL COMMENT 'password',
  PRIMARY KEY (`name`)
)
CREATE TABLE `express` (
  `number` varchar(10) NOT NULL COMMENT 'number',
  `a_date` varchar(10) DEFAULT NULL COMMENT 'a_date',
  `t_date` varchar(10) DEFAULT NULL COMMENT 't_date',
  `k_name` varchar(10) DEFAULT NULL COMMENT 'k_name',
  PRIMARY KEY (`number`)
) 

CREATE TABLE `users` (
  `name` varchar(10) NOT NULL COMMENT 'name',
  `password` varchar(10) DEFAULT NULL COMMENT 'password',
  PRIMARY KEY (`name`)
)