zoukankan      html  css  js  c++  java
  • 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 }

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

  • 相关阅读:
    [Jweb] Servlet 生命周期, TestLifeCycleServlet extends HttpServlet
    [Java] Javadoc jdk 下载地址
    [Jweb] 在 servlet 中重写 service() 方法,不重写 doGet, doPost 方法,示例。
    [Jweb] Servlet / GenericServlet / HttpServlet 及其方法示意图
    [Jweb] 第一个通过 tomcat 配置,浏览器访问的 web 界面
    [Jweb] tomcat 知识点 (from bjsxt ZZY)
    [Jweb] HTTP 1.1与HTTP 1.0的比较 (from bjsxt 张志宇)
    post方式提交数据
    php页面获取数据库中的数据
    表单输入框样式
  • 原文地址:https://www.cnblogs.com/youngao/p/9822478.html
Copyright © 2011-2022 走看看