先实现数据库和数据表,检测正常后再作其余的
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');
具体实现
有两个类,一个用来操做数据库一个用来实现用户界面的选择java
数据库操做类的实现c++
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 }
用户界面操做类的实现sql
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 }
但这样定义虽然可以运行可是程序阅读起来可能会引发误解,所以不提倡这样定义。apache