標籤:
問題一:Statement和PreparedStatement的區別
先來說說,什麼是java中的Statement:Statement是java執行資料庫操作的一個重要方法,用於在已經建立資料庫連接的基礎上,向資料庫發送要執行的SQL語句。具體步驟:
1.首先匯入java.sql.*;這個包。
2.然後載入驅動,建立串連,得到Connection介面的的實現對象,比如對象名叫做conn。
3.然後再用conn對象去建立Statement的執行個體,方法是:Statement stmt = conn.creatStatement("SQL語句字串");
Statement 對象用於將 SQL 陳述式發送到資料庫中。實際上有三種 Statement 對象,它們都作為在給定串連上執行 SQL語句的包容器:Statement、PreparedStatement(它從 Statement 繼承而來)和CallableStatement(它從 PreparedStatement 繼承而來)。它們都專用於發送特定類型的 SQL 陳述式:Statement 對象用於執行不帶參數的簡單 SQL 陳述式;PreparedStatement 對象用於執行帶或不帶參數的先行編譯 SQL 陳述式;CallableStatement 對象用於執行對資料庫已預存程序的調用。
綜上所述,總結如下:Statement每次執行sql語句,資料庫都要執行sql語句的編譯,最好用於僅執行一次查詢並返回結果的情形,效率高於PreparedStatement.但存在sql注入風險。PreparedStatement是先行編譯執行的。在執行可變參數的一條SQL時,PreparedStatement要比Statement的效率高,因為DBMS先行編譯一條SQL當然會比多次編譯一條SQL的效率高。安全性更好,有效防止SQL注入的問題。對於多次重複執行的語句,使用Prepared
Statement效率會更高一點。執行SQL語句是可以帶參數的,並支援批量執行SQL。由於採用了Cache機制,則先行編譯的語句,就會放在Cache中,下次執行相同的SQL語句時,則可以直接從Cache中取出來。
PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SET name= ? WHERE ID = ?");pstmt.setString(1, "李四");pstmt.setInt(2, 1);pstmt. executeUpdate();
那麼CallableStatement擴充了PreparedStatement的介面,用來調用預存程序,它提供了對於輸入和輸出參數的支援,CallableStatement 介面還有對 PreparedStatement 介面提供的輸入參數的sql查詢的支援。
PreparedStatement: 資料庫會對sql語句進行先行編譯,下次執行相同的sql語句時,資料庫端不會再進行先行編譯了,而直接用資料庫的緩衝區,提高資料訪問的效率(但盡量採用使用?號的方式傳遞參數),如果sql語句只執行一次,以後不再複用。 從安全性上來看,PreparedStatement是通過?來傳遞參數的,避免了拼sql而出現sql注入的問題,所以安全性較好。 在開發中,推薦使用 PreparedStatement
參考部落格:http://blog.csdn.net/yejin191258966/article/details/8453909
問題二:什麼是SQL注入,怎麼防止SQL注入?
所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入欄位名或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的SQL命令。具體來說,它是利用現有應用程式,將(惡意)的SQL命令注入到後台資料庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全性漏洞的網站上的資料庫,而不是按照設計者意圖去執行SQL語句。
怎麼防止SQL注入,使用預存程序來執行所有的查詢;檢查使用者輸入的合法性;將使用者的登入名稱、密碼等資料加密儲存。
問題三:Spring中的事務是如何配置的?Spring中的AOP實現是基於什麼原理?
先來回答第二個問題,是個開發人員都知道Spring中的AOP說的是面向切面的編程。所以,再深入點,AOP的實現原理其實是Java的動態代理
第二個問題,先來說說資料庫中的事務,再來說所Spring是怎麼處理資料庫中的事務的。通俗的說,資料庫事務就是在你需要插入1000條資料,然後再修改其中5條,刪除其中3條的操作執行完畢之後的一次性提交。而在提交之前,這些變動實際上不寫入資料庫的。同時,裡面如果有一步出錯的話,所有的在這一個事務內部做過的變動都要撤銷、復原。如果未使用事務的話,對於上述操作,實際上資料庫操作的次數是100+5+3次。那麼,Spring對事務做了一些什麼事情呢?Spring對事務做了封裝,可以通過申明的方式提供交易管理,
問題四:線程池你有使用過嗎?實現多線程的兩種方式是什嗎?
http://www.blogjava.net/robbie/archive/2009/04/05/264003.html
http://www.cnblogs.com/RunForLove/p/4564224.html
Statement和PreparedStatement的區別; 什麼是SQL注入,怎麼防止SQL注入? (轉)