Docker 安裝Mysql,RabbitMQ
阿新 • • 發佈:2020-12-09
實現功能:
1、需求: 模擬使用者登入功能的實現。 2、業務描述: 程式執行的時候,提供一個輸入的入口,可以讓使用者輸入使用者名稱和密碼 使用者輸入使用者名稱和密碼之後,提交資訊,java程式收集到使用者資訊 Java程字連線資料庫驗證使用者名稱和密碼是否合法 合法:顯示登入成功 不合法:顯示登入失敗 3、資料的準備: 在實際開發中,表的設計會使用專業的建模工具,我們這裡安裝一一個建模工具: PowerDesigner 使用pD工具來進行資料庫表的設計。(為了方便我已經把建表程式碼放在下面)
SQL表:user_login.sql:
drop table if exists t_user; /*==============================================================*/ /* Table: t_user */ /*==============================================================*/ create table t_user ( id bigint auto_increment, userNamevarchar(255), userPwd varchar(255), name varchar(255), primary key (id) ); insert into t_user(userName,userPwd,name) values('zhangsan','123','張三'); insert into t_user(userName,userPwd,name) values('llisi','123','李四'); commit; select * from t_user;
連線資料庫測試程式碼:
import java.sql.*; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Test07_模擬使用者登良功能的實現 { public static void main(String[] args) { //初始化一個介面的方法 Map<String,String> userLogin = chuShiHuaUi(); //驗證使用者名稱和密碼 Boolean dengLu = login(userLogin); //最後輸出結果 System.out.println(dengLu ? "登入成功!" : "登入失敗!"); } private static Boolean login(Map<String, String> userLogin) { //打標記 Boolean b = false; Connection conn = null; Statement s = null; ResultSet rs = null; try{ //1、註冊驅動 Class.forName("com.mysql.jdbc.Driver"); //2、獲取連線 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/donglijiedian","root","zhixi158"); //3、獲取資料庫操作物件 s = conn.createStatement(); //4、操作MySQL //SQL語句中字串是'',要想獲取資料要加雙引號,中間加上資料 String sql = "select * from t_user where userName = '"+userLogin.get("userName")+"' and userPwd = '"+userLogin.get("userPwd")+"'"; rs = s.executeQuery(sql); //5、處理查詢結果集 //使用者名稱錯的情況下查不到記錄,使用者名稱正確情況下也最多查出一條記錄,所以用if就夠了 if(rs.next()){ return true;//如果存在這條記錄就返回 } }catch(Exception e){ e.printStackTrace(); }finally { //6、釋放資源,由內到外 try{ if(rs != null) rs.close(); }catch(Exception e){ e.printStackTrace(); } try{ if(s != null) s.close(); }catch(Exception e){ e.printStackTrace(); } try{ if(conn != null) conn.close(); }catch(Exception e){ e.printStackTrace(); } } return b; } private static Map<String, String> chuShiHuaUi() { Scanner s = new Scanner(System.in); //獲取使用者名稱 System.out.println("使用者名稱:"); String userName = s.nextLine();//nextLine返回一行資料 //獲取密碼 System.out.println("密碼:"); String userPwd = s.nextLine(); //組裝Map集合 Map<String,String> userLogin = new HashMap<>(); userLogin.put("userName",userName);//新增使用者名稱 userLogin.put("userPwd",userPwd);//新增密碼 return userLogin;//返回集合資料 } }
SQL注入問題:
在我們測試的時候,驗證使用者名稱和密碼發現是沒有問題的。
但是我們輸入一些特定的字元,就發現了問題:
發現輸入一些執行的字元會出現登入成功,這顯然是不符合我們的需求的。
解決SQL注入的方法: