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 }
但这样定义虽然能够运行但是程序阅读起来可能会引起误解,因此不提倡这样定义。