JDBC连接mysql数据库操作
一.創(chuàng)建所需對(duì)象,并進(jìn)行初始化
Connection connection=null; Statement statement=null; PreparedStatement pst; ResultSet rs=null;二.加載mysql驅(qū)動(dòng)
Class.forName("com.mysql.jdbc.Driver");三.創(chuàng)建鏈接(url為數(shù)據(jù)庫(kù)連接,root帳號(hào),pwd密碼)
connection=DriverManager.getConnection(url,root,pwd);四.創(chuàng)建statement一般創(chuàng)建為預(yù)編形的即PreparedStatement,如果使用Statement會(huì)引起sql注入攻擊,首先是一般的Statement:
statement=connection.createStatement(); String sql="select * from user where username='"+username+"'"+"and password='"+password+"'"; rs=statement.executeQuery(sql);if(rs.next()){response.getWriter().print("connection is ok");}else {response.getWriter().print("用戶名密碼錯(cuò)誤");}五.測(cè)試:1.輸入正確帳號(hào)="張三",密碼=1234;獲得效果
?
2.輸入錯(cuò)誤帳號(hào)=12312,密碼=1231234' or '1'='1;獲得效果,并將sql語(yǔ)句打印出來(lái)
3.總結(jié):這句sql相當(dāng)與( select * from user)一般的stament會(huì)因?yàn)閟ql拼接的問(wèn)題,可能會(huì)被惡意攻擊,攻擊者可以無(wú)需帳號(hào)密碼即可登錄,可甚至可以刪除你的數(shù)據(jù)庫(kù)。
六.使用PreparedStatement防止sql注入,增強(qiáng)安全性,而且他比statement的效率更高,因?yàn)樗穷A(yù)先編譯好的sql語(yǔ)句,使用?來(lái)代表參數(shù),通過(guò)pst.setString方法將值傳入,
第一個(gè)參數(shù)代表是第幾個(gè)?的位置(從1開(kāi)始),第二個(gè)參數(shù)代表是參數(shù)值。
String sql="select * from user where username=? and password=?";pst=connection.prepareStatement(sql);pst.setString(1, username);pst.setString(2, password);System.out.println(pst.toString());rs=pst.executeQuery();if(rs.next()){response.getWriter().print("connection is ok");}else {response.getWriter().print("用戶名密碼錯(cuò)誤");}七.測(cè)試:輸入錯(cuò)誤帳號(hào)=12312,密碼=1231234' or '1'='1(sql注入方法能否正常登錄)
八.總結(jié),為什么能防止sql,看打印出來(lái)的sql語(yǔ)句便可以知道,預(yù)編譯的語(yǔ)句在執(zhí)行時(shí)會(huì)自動(dòng)轉(zhuǎn)義一些字符,從而防止sql注入
?
轉(zhuǎn)載于:https://www.cnblogs.com/hckblogs/p/7701184.html
總結(jié)
以上是生活随笔為你收集整理的JDBC连接mysql数据库操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 华为机试题【10】-求数字基root
- 下一篇: PLSQL 申明和游标