1. 程式人生 > >JDBC----Statement安全問題與PrepareStatement

JDBC----Statement安全問題與PrepareStatement

1. Statement執行 ,其實是拼接sql語句的。  先拼接sql語句,然後在一起執行。 


        String sql = "select * from user where username='"+ username  +"' and password='"+ password +"'";

        UserDao dao = new UserDaoImpl();
        dao.login("admin", "100234khsdf88' or '1=1");
    
        SELECT * FROM t_user WHERE username='admin' AND PASSWORD='100234khsdf88' or '1=1' 
    
        前面先拼接sql語句, 如果變數裡面帶有了 資料庫的關鍵字,那麼一併認為是關鍵字。 不認為是普通的字串。 
        rs = st.executeQuery(sql);

2.PrepareStatement:

> 該物件就是替換前面的statement物件。

1. 相比較以前的statement, 預先處理給定的sql語句,對其執行語法檢查。 在sql語句裡面使用 ? 佔位符來替代後續要傳遞進來的變數。 後面進來的變數值,將會被看成是字串,不會產生任何的關鍵字。


            String sql = "insert into user values(null , ? , ?)";
             ps = conn.prepareStatement(sql);
             
             //給佔位符賦值 從左到右數過來,1 代表第一個問號, 永遠你是1開始。
             ps.setString(1, userName);
             ps.setString(2, password);