2016-12-18 126 views
-2

我只是想知道在java中插入值的最佳方式是什麼,比如java程序員在插入值時會做什麼,並告訴我爲什麼?在數據庫中插入條目的最佳方法

這是這樣嗎?

String query = "insert into table (table1) values (1)"; PreparedStatement stmt = connection.preparedStatement(query); stmt.execute();

或這樣嗎?

String query = "insert into table (table1) values (?)"; PreparedStatement stmt = connection.preparedStatement(query); stmt.setInt(1,"1"); stmt.execute();

還是有更好的辦法?

只是要求,以提高我的編碼知識:d

+0

總是使用第二個選項。如果您使用第一個選項並通過硬編碼字符串和用戶輸入構建語句,則您將開放SQL注入。每當有可變數據時應使用第二種方法。 –

回答

1

第二個選項允許你查詢變量輸入。如果您可以對這些值進行硬編碼,那麼第一個選項會更快。

當您允許用戶輸入(用戶可以決定查詢中的值)時,第二個選項允許您將值安全地置於查詢中。這一點,在另一方面,是一個非常大禁忌:

String userInput = askUserForSomeValue(); 
String query = "insert into table (table1) values ("+userInput+")"; 
PreparedStatement stmt = connection.preparedStatement(query); 
stmt.execute(); 

,因爲它允許用戶發送SQL injection字符串。

+0

哦,所以這取決於情況,非常感謝 –

0

一般Prepared聲明被認爲是正常的Statement,而不是由於它的預編譯和在理想情況下導致了整體更快的執行速度和重複使用相同的SQL語句批次的能力語句的DB-端緩存。在防止SQL Injects也是非常安全的。

這個thread也可以得心應手。

+0

我讀過這個線程,所以在編譯速度方面,語句速度要慢很多,而且準備語句要快得多,因爲它不需要編譯,但是在有些案例的陳述非常有效。 –

+0

謝謝,瞭解了很多 –

0

PreparedStatements是要走的路,因爲它們使SQL注入變得不可能。 下面是以用戶輸入爲參數的一個簡單示例:

PreparedStatement stmt = conn.prepareStatement("INSERT INTO person (value) values (?)"); 
stmt.setInt(1,userinput); 
stmt.executeUpdate(); 
+0

其中con是連接對象 –

相關問題