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

 CREATE TABLE users(
username VARCHAR(20) NOT NULL,
PASSWORD VARCHAR(10) NOT NULL);
INSERT INTO users VALUES
('a',''),('b','');

具体实现

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

数据库操作类的实现

 package Test;

 import java.sql.SQLException;

 import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler; //这个类是操作数据库的类
// 实现两个方法用于用户注册和登录 public class UsersDao {
//创建QueryRunner类对象,在构造方法中传递工具类获得数据源
private QueryRunner qr =new QueryRunner(JDBCUtils.getDataSource()); //创建登录功能接收用户输入的用户名和密码,并进行判断
//当结果集为0时说明没有查到相应的用户名和密码,返回false
public boolean login(String username,String password) throws SQLException{
String sql="select * from users where username=? and password=?";
Object[] params={username,password};
//调用quer的query方法查询数据表
Object[] res=qr.query(sql, new ArrayHandler(),params);
//对查询到的结果判断
if(res.length==0)
return false;
return true;
} //判断用户名是否被注册了
public boolean register(String username,String password){
try{
String sql ="select username from users where username=?";
//查询结果集,ScalarHander表示一个结果集
String user=qr.query(sql, new ScalarHandler<String>(), username);
//如果用户名存在,user里存的为用户名,若不存在则为null
if(user!=null)
return false;
//不需要if else语句return直接返回了,下面语句不执行
sql="insert into users (username,PASSWORD) values (?,?)";
//创建数组对象保存占位符的实际参数
Object[] params={username,password};
//调用qr对象方法update写入数据
qr.update(sql,params);
return true;
}catch(SQLException e){
throw new RuntimeException("注册失败!");
}
}
}

用户界面操作类的实现

 package Test;

 import java.sql.SQLException;
import java.util.Scanner; //用户操作界面--提供菜单选择不同功能
public class UserOperator {
private static Scanner sc=new Scanner(System.in);
//private String username;
public static void main(String[] args) throws SQLException {
//和局部变量的定义不同
UsersDao dao=new UsersDao();
//调用选择方法,获取用户选择内容
String number=chooser(); //对选择序号判断
switch(number){
case "1":
System.out.println("选择的是登录,请输入用户名:");
//username在case 1中被定义的,能够作用在case 2,不明白为什么?在C语言里是明显不行的
String username=sc.next();
System.out.println("请输入密码:");
String password=sc.next();
//调用userdao类的login方法,传递用户名和密码
boolean b=dao.login(username,password);
if(b)
System.out.println("登录成功!");
else
System.out.println("登录失败,请检查您的用户名和密码!");
break;
case "2":
System.out.println("选择的是注册,请输入用户名:");
username=sc.next();
System.out.println("请输入密码:");
password=sc.next();
b=dao.register(username,password);
if(b)
System.out.println("注册成功!");
else
System.out.println("注册失败,请尝试"+username+"123");
break;
case "3":
System.exit(0);
default:
System.out.println("没有此功能!");
}
} //功能选择菜单方法
public static String chooser(){
System.out.println("欢迎光临!");
System.out.println("请选择功能菜单:");
System.out.println("1 登录 2 注册 3 退出");
return sc.next();
}
}

注:在用户界面操作类中有一处不理解关于switch中usernam,password的定义,当一开始直接选择2时明显是没有被定义为什么还能正常使用?此处不明白,在传统的c、c++语言语法中这样做肯定是会出错的。后面可能理解可能是java语言中所有case的命名空间是一样的,还要在一处定义即可,下面这个代码能够正常运行:

 public class Main{
public static void main(String[] args) {
int n=2;
int m=0;
switch(n){
case 1: int a=1;break;
case 2: a=2;m=a;break; }
System.out.println(m);
}
}

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

Java数据库小项目01--实现用户登录注册的更多相关文章

  1. Java数据库小项目00---基础知识

    目录 JDBC的简单使用 向JDBC注入攻击 防止注入攻击 自建JDBC工具类 自建工具类优化--使用配置文件 使用数据库连接池优化工具类 JDBC的简单使用 package Test; import ...

  2. Java数据库小项目02--管家婆项目

    目录 项目要求 开发环境搭建 工具类JDBCUtils 创建管家婆数据表 项目分层 MainApp层 MainView层 ZhangWuController层 ZhangWuService层 Zhan ...

  3. android安卓Sqlite数据库实现用户登录注册

    看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!建立一个类 并继承SQLiteOpenHelper public ...

  4. Java Spring+Mysql+Mybatis 实现用户登录注册功能

    前言: 最近在学习Java的编程,前辈让我写一个包含数据库和前端的用户登录功能,通过看博客等我先是写了一个最基础的servlet+jsp,再到后来开始用maven进行编程,最终的完成版是一个 Spri ...

  5. swing 实现用户登录注册界面(不使用数据库)

    swing 实现用户登录注册界面(不使用数据库) 实现的功能 先说一下具体实现的功能吧:用户注册后会将注册的对象存入内存中,登录时会遍历注册的对象列表,判断是否登录成功: 登录和注册界面: 本次实验分 ...

  6. 转:C4项目中验证用户登录一个特性就搞定

    转:C4项目中验证用户登录一个特性就搞定   在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性.     // 摘要:    //     表示一个特性,该特性用于限制调用 ...

  7. vue新手入门之使用vue框架搭建用户登录注册案例,手动搭建webpack+Vue项目(附源码,图文详解,亲测有效)

    前言 本篇随笔主要写了手动搭建一个webpack+Vue项目,掌握相关loader的安装与使用,包括css-loader.style-loader.vue-loader.url-loader.sass ...

  8. javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  9. JavaWeb学习 (二十一)————基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

随机推荐

  1. Flask Bug记录之JinJa2.exceptions.UndefinedError: 'sqlite3.Row object' has no attribute 'get'

    源码 py文件定义db的工厂函数如下 def get_db(): if "db" not in g: g.db = sqlite3.connect( current_app.con ...

  2. taglib block

    新建文件 package com.augmentum.oes.taglib; import javax.servlet.jsp.JspException; import javax.servlet.j ...

  3. if (strAreaCode.Find("体检")>=0)

    string类提供了6种查找函数,每种函数以不同形式的find命名. 这些操作全部返回string::size_type类型的值,以下形式标记查找匹配所发生的位置: 或者返回一个名为string::n ...

  4. C# 中使用正则表达式 Regex.Matches方法的几个应用[转]

    用于正则表达式的 Regex.Matches静态方法的几种用法: //①正则表达式 = > 匹配字符串 string Text = @"This is a book , this is ...

  5. gdb-example-ncurses

    gdb-example-ncurses http://www.brendangregg.com/blog/2016-08-09/gdb-example-ncurses.html 1. The Prob ...

  6. luogu P3773 [CTSC2017]吉夫特

    luogu 这里的组合数显然要用\(\text{lucas}\)定理来求,所以考虑\(\text{lucas}\)定理的本质,即把\(n,m\)分别拆分成\(p\)进制串\(\{a\}\{b\}\), ...

  7. LLVM的RTTI特性

    本文思路来源于http://llvm.org/docs/HowToSetUpLLVMStyleRTTI.html,叙述有不同,望谅解,希望能从其他方面帮助大家了解C++语言的底层实现. 背景 在LLV ...

  8. linux MD5使用

    # define MD5_LONG unsigned int # define MD5_CBLOCK 64 # define MD5_LBLOCK (MD5_CBLOCK/4) # define MD ...

  9. DX使用随记--ImageComboBoxEdit

    1. 增加按钮: Combo_订单类型.Properties.Items.Clear()Select Case Combo_客户名称.EditValue Case "ABC" Co ...

  10. 2.3 使用 dom4j 对 xml文件进行 dom 解析

    // 使用dom4j对XML文档进行解析 CRUD public class Demo1 { //读取XML文档中第二本书的书名 <书名>javaWEB</书名> @Test ...