先实现数据库和数据表,检测正常后再做其他的
1 CREATE TABLE users(
2 username VARCHAR(20) NOT NULL,
3 PASSWORD VARCHAR(10) NOT NULL);
4 INSERT INTO users VALUES
5 ('a','1'),('b','2');
具体实现
有两个类,一个用来操作数据库一个用来实现用户界面的选择
数据库操作类的实现
1 package Test;
2
3 import java.sql.SQLException;
4
5 import org.apache.commons.dbutils.QueryRunner;
6 import org.apache.commons.dbutils.handlers.ArrayHandler;
7 import org.apache.commons.dbutils.handlers.ScalarHandler;
8
9 //这个类是操作数据库的类
10 // 实现两个方法用于用户注册和登录
11
12 public class UsersDao {
13 //创建QueryRunner类对象,在构造方法中传递工具类获得数据源
14 private QueryRunner qr =new QueryRunner(JDBCUtils.getDataSource());
15
16 //创建登录功能接收用户输入的用户名和密码,并进行判断
17 //当结果集为0时说明没有查到相应的用户名和密码,返回false
18 public boolean login(String username,String password) throws SQLException{
19 String sql="select * from users where username=? and password=?";
20 Object[] params={username,password};
21 //调用quer的query方法查询数据表
22 Object[] res=qr.query(sql, new ArrayHandler(),params);
23 //对查询到的结果判断
24 if(res.length==0)
25 return false;
26 return true;
27 }
28
29 //判断用户名是否被注册了
30 public boolean register(String username,String password){
31 try{
32 String sql ="select username from users where username=?";
33 //查询结果集,ScalarHander表示一个结果集
34 String user=qr.query(sql, new ScalarHandler<String>(), username);
35 //如果用户名存在,user里存的为用户名,若不存在则为null
36 if(user!=null)
37 return false;
38 //不需要if else语句return直接返回了,下面语句不执行
39 sql="insert into users (username,PASSWORD) values (?,?)";
40 //创建数组对象保存占位符的实际参数
41 Object[] params={username,password};
42 //调用qr对象方法update写入数据
43 qr.update(sql,params);
44 return true;
45 }catch(SQLException e){
46 throw new RuntimeException("注册失败!");
47 }
48 }
49 }
用户界面操作类的实现
1 package Test;
2
3 import java.sql.SQLException;
4 import java.util.Scanner;
5
6 //用户操作界面--提供菜单选择不同功能
7 public class UserOperator {
8 private static Scanner sc=new Scanner(System.in);
9 //private String username;
10 public static void main(String[] args) throws SQLException {
11 //和局部变量的定义不同
12 UsersDao dao=new UsersDao();
13 //调用选择方法,获取用户选择内容
14 String number=chooser();
15
16 //对选择序号判断
17 switch(number){
18 case "1":
19 System.out.println("选择的是登录,请输入用户名:");
20 //username在case 1中被定义的,能够作用在case 2,不明白为什么?在C语言里是明显不行的
21 String username=sc.next();
22 System.out.println("请输入密码:");
23 String password=sc.next();
24 //调用userdao类的login方法,传递用户名和密码
25 boolean b=dao.login(username,password);
26 if(b)
27 System.out.println("登录成功!");
28 else
29 System.out.println("登录失败,请检查您的用户名和密码!");
30 break;
31 case "2":
32 System.out.println("选择的是注册,请输入用户名:");
33 username=sc.next();
34 System.out.println("请输入密码:");
35 password=sc.next();
36 b=dao.register(username,password);
37 if(b)
38 System.out.println("注册成功!");
39 else
40 System.out.println("注册失败,请尝试"+username+"123");
41 break;
42 case "3":
43 System.exit(0);
44 default:
45 System.out.println("没有此功能!");
46 }
47 }
48
49 //功能选择菜单方法
50 public static String chooser(){
51 System.out.println("欢迎光临!");
52 System.out.println("请选择功能菜单:");
53 System.out.println("1 登录 2 注册 3 退出");
54 return sc.next();
55 }
56 }
注:在用户界面操作类中有一处不理解关于switch中usernam,password的定义,当一开始直接选择2时明显是没有被定义为什么还能正常使用?此处不明白,在传统的c、c++语言语法中这样做肯定是会出错的。后面可能理解可能是java语言中所有case的命名空间是一样的,还要在一处定义即可,下面这个代码能够正常运行:
1 public class Main{
2 public static void main(String[] args) {
3 int n=2;
4 int m=0;
5 switch(n){
6 case 1: int a=1;break;
7 case 2: a=2;m=a;break;
8
9 }
10 System.out.println(m);
11 }
12 }
但这样定义虽然能够运行但是程序阅读起来可能会引起误解,因此不提倡这样定义。