Java數據庫小項目01--實現用戶登錄注冊


先實現數據庫和數據表,檢測正常后再做其他的

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 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 }

用戶界面操作類的實現

 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 }

但這樣定義雖然能夠運行但是程序閱讀起來可能會引起誤解,因此不提倡這樣定義。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM