博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java数据库小项目01--实现用户登录注册
阅读量:4881 次
发布时间:2019-06-11

本文共 4377 字,大约阅读时间需要 14 分钟。

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

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 具体实现

有两个类,一个用来操作数据库一个用来实现用户界面的选择

数据库操作类的实现

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时说明没有查到相应的用户名和密码,返回false18     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
(), username);35 //如果用户名存在,user里存的为用户名,若不存在则为null36 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                 else29                     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                 else40                     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 }

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

 

转载于:https://www.cnblogs.com/youngao/p/9822478.html

你可能感兴趣的文章
OPMN
查看>>
LOG收集系统(一):原日志至收集
查看>>
【文摘】经营十二条
查看>>
清除浮动的方法
查看>>
Logstash连接Elasticsearch异常
查看>>
洛谷P4287 [SHOI2011]双倍回文(回文自动机)
查看>>
用户交互程序,格式化输出
查看>>
GNOME的发展与对比
查看>>
SPOJ PT07X Vertex Cover
查看>>
$ python-json模块的基本用法
查看>>
5.6.3.4 trim()方法
查看>>
Cookie、Session和自定义分页
查看>>
SQL演练
查看>>
React Antd中样式的修改
查看>>
Spring 应用外部属性文件 配置 context 错误
查看>>
导入lxml找不到etree,报ImportError:DLL load failed:找不到指定的程序
查看>>
面向对象一
查看>>
大象的崛起!Hadoop七年发展风雨录
查看>>
图片二值化
查看>>
数据库常用函数
查看>>