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

 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. 利用js对象将iframe数据缓存, 实现子页面跳转后, 返回时不丢失之前填写的数据

    利用js对象将iframe数据缓存, 实现子页面跳转后, 返回时不丢失之前填写的数据 实现描述:将数据存放在js对象中, 然后放在父页面的document对象中, 在页面刷新的时候将父页面的值取出来, ...

  2. Problems to be upsolved

    Donation 官方题解尚未看懂. comet oj contest15 双11特惠hard Mobitel Small Multiple 题解 为什么可以如此缩点? Candy Retributi ...

  3. HTTPS 简单学习

    1. HTTP缺点 使用明文通信,内容可能会被窃听: 通信加密:使用SSL和TLS: 内容加密: 不验证通信方的身份,因此可能会遭到伪装: SSL提供加密和证书: 无法证明报文的完整性,因此会遭到修改 ...

  4. 网络流Dinic--模板

    #define IOS ios_base::sync_with_stdio(0); cin.tie(0); #include <cstdio>//sprintf islower isupp ...

  5. S02_CH08_ ZYNQ 定时器中断实验

    S02_CH08_ ZYNQ 定时器中断实验 上一章实现了PS接受来自PL的中断,本章将在ZYNQ的纯PS里实现私有定时器中断.每隔一秒中断一次,在中断函数里计数加1,通过串口打印输出. 8.1中断原 ...

  6. layer,备受青睐的web弹层组件

    //http://layer.layui.com/ 特别说明:事件需自己绑定,以下只展现调用代码. //初体验 layer.alert('内容') //第三方扩展皮肤 layer.alert('内容' ...

  7. fastclick插件学习(一)之用法

    原理 在检测到touchend事件后, 会通过dom自定义事件模拟一个click事件,并把浏览器300ms之后真正触发的点击事件屏蔽掉,fastclick是不会对PC浏览器添加监听事件 使用 1.引入 ...

  8. LeetCode 腾讯精选50题--求众数

    由于众数是指数组中相同元素的个数超过数组长度的一半,所以有两种思路,一. 先排序,后取排序后的数组的中间位置的值:二. 统计,设定一个变量统计相同元素出现的次数,遍历数组,若与选定的元素相同,统计变量 ...

  9. vue项目,子页面刷新404问题

    翻车事故分析: 因需对项目整体优化,调整过程,采用了路由的history模式,本地项目运行,刷新子页面都是OK的. 部署到测试服务器,正常跳转都ok,但刷新子页面就会出现404,请求变成了get,没有 ...

  10. PHPExcel的简单使用

    一.在做PHP开发时,我们会遇到把数据导出变为execl表格的形式,使用PHPExcel就可以,下载地址:https://github.com/PHPOffice/PHPExcel,下载后会显示这么多 ...