Java数据库小项目01--实现用户登录注册

先实现数据库和数据表,检测正常后再做其他的

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 }

但这样定义虽然能够运行但是程序阅读起来可能会引起误解,因此不提倡这样定义。

 

posted @ 2018-10-20 18:03  windy杨树  阅读(6247)  评论(0编辑  收藏  举报