public class Login {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//连接数据库
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");
//创建statement对象
Statement stmt = conn.createStatement();
//请求输入用户名
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String name = sc.nextLine();
//使用命令进行查询功能
String sql = "select * from user";
ResultSet rs = stmt.executeQuery(sql);
//遍历查询到的表
while (rs.next()) {
//用户名在第二列
String name2 = rs.getString(2);
//如果输入的用户名与数据库的用户名一致就提示输入密码操作
if (name2.equals(name)) {
System.out.println("请输入密码");
String password = sc.nextLine();
//再重新创建一个Statement对象
Statement stmt2 = conn.createStatement();
//通过查询命令以及通过自己输入的用户名查询password
String sql2 = "select password from user where name=" + "'" + name + "'";
ResultSet rs2 = stmt2.executeQuery(sql2);
rs2.next();
String psd = rs2.getString(1);
//如果密码一致提示登录成功
if (psd.equals(password)) {
System.out.println("登录成功");
//进行登录操作
operation(conn);
//密码不一致提示密码有误
} else {
System.out.println("密码有误");
}
//登录成功或者登录失败就打断循环 关闭资源
stmt2.close();
return;
}
}
//如果输入的用户名与数据库中的不一致就提示无此用户 并关闭资源
System.out.println("无此用户");
stmt.close();
conn.close();
}
public static void operation(Connection conn) throws SQLException {
Scanner sc = new Scanner(System.in);
boolean flag = true;
Statement stmt = conn.createStatement();
//死循环进行命令行的输入
while (flag) {
//提示输入命令行
System.out.print("mysql>");
String line = sc.nextLine();
//如果输入的不为空
if (line != null) {
//判断第一个单词,并把单词变成小写与select和exit相比较,如果与select一致,进行查询操作
String[] strArr = line.split(" ");
String str1 = strArr[0];
String str = str1.toLowerCase();
if (str.equals("select")) {
//可能会出现语法错误,所有要用try catch
try {
ResultSet rs = stmt.executeQuery(line);
//通过spilt 得到第二个单词 判断第二个单词是否为*
String s = strArr[1];
//如果为*进行遍历全部的查询操作
if (s.equals("*")) {
while (rs.next()) {
int id = rs.getInt(1);
String name = rs.getString(2);
String psd = rs.getString(3);
String number = rs.getString(4);
System.out.println(id + " " + name + " " + psd + " " + number);
}
//如果不为* 再用spilt方法 得到每一个期望得到的列名 进行遍历
} else {
while (rs.next()) {
String[] strings = s.split(",");
for (int i = 0; i < strings.length; i++) {
String string = rs.getString(strings[i]);
System.out.print(string + " ");
}
System.out.println();
}
}
} catch (MySQLSyntaxErrorException e) {
String message = e.getMessage();
System.out.println(message);
}
//第一个单词如果为exit 就退出循环
} else if (str.equals("exit")) {
System.out.println("bye");
flag = false;
//第一个单词如果不为select也不为exit 就进行增删改操作
} else {
int i = 0;
//可能会出现语法错误,需要用try catch
try {
i = stmt.executeUpdate(line);
} catch (MySQLSyntaxErrorException e) {
String message = e.getMessage();
System.out.println(message);
} finally {
if (i > 0) {
System.out.println("mysql>操作成功,影响" + i + "行");
} else {
System.out.println("mysql>操作失败,影响" + i + "行");
}
}
}
//如果为空?
} else {
operation(conn);
}
}
}
}