JDBC使用PreparedStatement的好處
我們為什麼在程式中要使用PreparedStatement而不是Statement?有以下幾個原因。
1,從程式本身的角度來看,PreparedStatement更具效率。
我們透過connection.preparedStatement(sql)方法來獲得PreparedStatment物件,然後透過preStatement.setXXX來設定查詢引數。
如果我有2個查詢,SQL語句都一樣,但是引數不同,使用PreparedStatment的話只需setXXX不同的引數、再次查詢即可,而如果使用Statement的話,
需要重新建立Statement物件,connection.createStatement(sql)
2,從資料庫層面來講,PreparedStatment更具效率。
在使用PreparedStatement時,資料庫系統會對sql語句進行預編譯處理(前提是JDBC驅動支援),具體包括SQL語句的分析,編譯,最佳化等過程,預編譯後會快取起來,執行計劃同樣也會快取起來,編譯的sql查詢語句能在將來的查詢中重用(同樣的查詢,哪怕引數值不同)。
需要注意的是,使用PreparedStatement時,SQL不要用String追加引數值,而應該使用preStatement.setXXX來設定查詢引數。
3,PreparedStatment可以防止SQL隱碼攻擊。
如:String sql = "SELECT * FROM user WHERE name = '" + userName + "' and password = '"+ passWord +"';"
惡意輸入引數值:userName = "1' OR '1'='1"; passWord = "1' OR '1'='1";
最終sql會變成:String sql = "SELECT * FROM user WHERE name = '1' OR '1'='1' and password = '1' OR '1'='1';"
這條語句相當於select * from user。
如果使用者再加上drop table user,後果將不堪設想。
所以使用PreparedStatement能避免此種情況,因為資料庫系統不會將引數的內容視為SQL指令的一部分來處理,只有在資料庫完成SQL指令的編譯後,才套用引數執行。因此就算引數中含有破壞性的指令,也不會被資料庫所執行。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28912557/viewspace-1146364/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JDBC教程之PreparedStatementJDBC
- MySQL-07——JDBC、Properties、DBCP、PreparedstatementMySqlJDBC
- JDBC之Statement,PreparedStatement,CallableStatement的區別JDBC
- java-Statement、PreparedStatement、PreparedStatement + 批處理 的區別Java
- JDBC中PreparedStatement介面的執行邏輯JDBC
- JDBC PreparedStatement 實現原理【推薦閱讀】JDBC
- JDBC3——SQL隱碼攻擊、及其解決方法——Statement與PreparedStatement對比——PreparedStatement的CRUDJDBCSQL
- 20160408javaweb之JDBC ---PreparedStatementJavaWebJDBC
- 使用預處理PreparedStatement執行Sql語句SQL
- 教程:使用PreparedStatement訪問DLA
- 使用PreparedStatement實現CRUD操作
- 使用多型的好處多型
- 使用Spring框架的好處Spring框架
- java preparedStatementJava
- MySQL PreparedStatementMySql
- JDBC的使用JDBC
- 使用PreparedStatement為佔位符?賦值賦值
- JDBC 批處理JDBC
- JavaBean中使用JDBC方式進行事務處理JavaBeanJDBC
- 使用反向代理的好處有什麼?
- JDBC當中的批處理JDBC
- 使用通用協作機器人的好處機器人
- 使用https證書的好處都有哪些?HTTP
- 在SSH框架中使用Spring的好處框架Spring
- 求一個全能的封裝好的jdbc bean封裝JDBCBean
- JDBC中Date日期物件的處理JDBC物件
- django的好處Django
- 敏捷的好處敏捷
- redis的好處和壞處Redis
- oracle中使用繫結變數的好處的例子Oracle變數
- 修改IP的好處使用在那些方面!
- Docker是什麼?使用Docker的好處有哪些?Docker
- 銷售人員使用CRM系統的好處
- 使用代理進行SEO的好處有什麼?
- Python中使用內層函式的好處Python函式
- 使用 NGINX 進行微程式快取的好處Nginx快取
- JDBC學習1:詳解JDBC使用JDBC
- Statement和PreparedStatement之間的區別