DBCP登入註冊案例
阿新 • • 發佈:2018-11-09
JDBCUtils:
package cn.itcase.jdbcutils; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; /* * 使用DBCP實現資料庫的連線池 * 連線池配置,自定義類 * 最基本四項完整 * 對於資料庫連線池其他配置,自定義 */ public class JDBCUtils { private static BasicDataSource datasource = new BasicDataSource(); static { datasource.setDriverClassName("com.mysql.jdbc.Driver"); datasource.setUrl("jdbc:mysql://localhost:3306/day33_user"); datasource.setUsername("root"); datasource.setPassword("123456"); //物件連線池中的連線數量配置 datasource.setInitialSize(10);//初始化的連線數 datasource.setMaxActive(8);//最大連線數量 datasource.setMaxIdle(5);//最大空閒數 datasource.setMinIdle(1);//最小空閒數 } //定義靜態方法,返回BasicDataSource類的物件 public static DataSource getDataSource() { return datasource; } }
UserDao.java:
package cn.itcase.dao; import java.sql.SQLException; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import cn.itcase.jdbcutils.JDBCUtils; /* * 操作資料庫中的表 day33 表 users * 兩個方法,實現使用者的註冊和登入 */ public class UsersDao { //建立QueryRunner類的物件,構造方法中,傳遞工具類獲取的資料來源 private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); /* * 建立註冊功能,接收使用者的輸入使用者名稱和密碼 * 返回註冊結果 true 註冊成功 false 註冊失敗,使用者名稱被佔 */ public boolean register(String username,String password) { try { //拼寫SQL語句,檢查使用者是否被佔,使用者名稱作為條件查詢 String sql = "SELECT username FROM users WHERE username=?"; //呼叫qr物件方法query查詢結果集,ScalarHandler 一個結果集 String user = qr.query(sql, new ScalarHandler<String>(), username); //如果使用者名稱存在,user變數,表示一個使用者名稱,使用者名稱不存在,user變數結果null if(user!=null) return false; //使用者名稱可以使用 //拼寫新增使用者密碼的SQL語句 sql="INSERT INTO users (username,PASSWORD) VALUES (?,?)"; //建立物件陣列,儲存?佔位符的實際引數 Object[] params = {username,password}; //呼叫qr物件方法update寫入資料 qr.update(sql, params); return true; }catch (SQLException ex) { System.out.println(ex); throw new RuntimeException("登入查詢失敗"); } } /* * 建立登入功能,接收使用者的輸入的使用者名稱和密碼 * 返回登入的結果true 登入成功 false 登入失敗 */ public boolean login(String username,String password) { try { //拼寫查詢資料表的SQL String sql = "SELECT * FROM users WHERE username=? and password=?"; Object[] params = {username,password}; //呼叫qr方法query查詢資料表 Object[] result=qr.query(sql, new ArrayHandler(), params); //對陣列進行判斷 if(result.length==0) { return false; } return true; }catch(SQLException ex) { System.out.println(ex); throw new RuntimeException("登入查詢失敗"); } } }
UserOperator.java:
package cn.itcase.ui; import java.util.Scanner; import cn.itcase.dao.UsersDao; /* * 實現和使用者的互動部分 * 提供選單,讓使用者選擇選單,根據選單,呼叫不同的功能 */ public class UserOperator { private static Scanner sc = new Scanner(System.in); public static void main(String[] args) { UsersDao dao = new UsersDao(); //呼叫選擇方法,獲取使用者的選擇內容 while(true) { String number=chooser(); //對選擇序號判斷 switch(number) { case "1": //接收鍵盤輸入,呼叫登入功能 System.out.println("選擇的是登入,請輸入使用者名稱"); String username = sc.next(); System.out.println("輸入密碼"); String password = sc.next(); //呼叫Dao包中的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(); //呼叫Dao包中的UserDao類中的方法register傳遞使用者名稱密碼 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("沒有此功能"); break; } } } /* * 定義方法,選擇功能選單的 * 返回選擇內容 */ public static String chooser() { System.out.println("歡迎光臨"); System.out.println("請選擇功能選單"); System.out.println("1 登入 2 註冊 3 退出"); return sc.next(); } }