先實現數據庫和數據表,檢測正常後再作其餘的
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