2013-06-25 36 views
1

方法1:在java web應用程序中將數據插入數據庫的最佳方式是什麼?

Connection connection=Connector.getConnection(); 
PreparedStatement ps1=connection.prepareStatement("insert into tbl_invtry(part_id,part_name) 
                values(?,?,)"); 
ps1.setString(1,action.getPart_id()); 
ps1.setString(2,action.getPart_name()); 

方法2

DAO dao = new DAOImpl(); //DB connection 
String query="insert into tbl_entrp_proj(ASPECT_SRC_ID,PRNT_PROJ_ID)values('" + 
             project.getASPECT_SRC_ID() + "','" + 
             project.getPRNT_PROJ_ID() + "')"; 
boolean b = dao.insertQuery(query); 

請表明這是最好的,爲什麼。 在此先感謝。

+1

這應該簡潔地解釋它。 http://xkcd.com/327/ – Achrome

+0

可能的重複[Java - 轉義字符串以防止SQL注入](http://stackoverflow.com/questions/1812891/java-escape-string-to-prevent-sql-injection ) – dasblinkenlight

回答

2

正如Ashwin和dasblinkenlight所言,SQL注入是值得關注的問題。

在方法1中,您使用參數化查詢來轉義任何用戶輸入以防止SQL注入,但在方法2中,您已經信任用戶提供直接插入數據庫的值。

請記住,插入SQL注入語句可能不會有問題,但在選擇(或其他查詢)時可能會破壞您的數據和數據庫。

不使用方法一是最不負責任,最糟糕的是由於這些原因災難性的。

有關方法1爲何最好的第二個原因,請參閱this question,其中討論了預準備語句的性能優勢,並強調了防範SQL注入的重要性。

2

我會去的第一個方法,因爲:

  1. 這是更有效 - 的PreparedStatement可以編譯和由數據庫重用。
  2. 安全。使用PreparedStatement時,您不必擔心編碼和SQL注入。

但是,我會考慮第三種方法 - 使用像Hibernate這樣的ORM框架。

相關問題