2010-09-14 105 views
0

開始提供用於在線用戶交互的Java Web應用程序。決定使用MySql DB進行數據存儲。我已經創建了具有適當/預期數據類型的表格。我的問題是,我一直認爲下一步是創建存儲過程,如搜索/添加/刪除/等等,用戶可以從頁面中調用。所以在我的Java代碼我可以調用程序前:創建Java Web應用程序/ MySql應用程序

CallableStatement cs; 
Try 
{ 
    String outParam = cs.getString(1);  // OUT parameter 

    // Call a procedure with one in and out parameter 
    cs = connection.prepareCall("{call SearchIt(?)}"); 
    cs.registerOutParameter(1, Types.VARCHAR); 
    cs.setString(1, "a string"); 
    cs.execute(); 
    outParam = cs.getString(1);  
} 
catch (SQLException e) { 
} 

,但如果我的應用程序是不是需要的存儲過程,因爲用戶的操作也非常簡單,執行簡單繁瑣的查詢。我如何設置我的Java和Sql代碼來處理這個問題。我可以在我的代碼中使用「選擇」或「更新」語句來操縱MySQL數據庫中的數據。如果是這樣的語法怎麼樣?

+0

沒有直接回答一個例子,但你可能會考慮尋找到使用,而不是Java持久性API(JPA)手工編碼與SQL數據庫交互。對於實現JPA規範的工具,Hibernate是一個很好的選擇。 – 2010-09-14 19:40:03

回答

1

此URL包含有關使用準備好的語句的文檔,這些語句是您想要用來避免安全漏洞(SQL注入等)的。

http://download.oracle.com/javase/tutorial/jdbc/basics/prepared.html

這裏是從頁

PreparedStatement updateSales = connection.prepareStatement(
     "UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? "); 
updateSales.setInt(1, 75); 
updateSales.setString(2, "Colombian"); 
updateSales.executeUpdate(): 
0

只要使用Statement或PreparedStatement。

http://download.oracle.com/javase/1.4.2/docs/api/java/sql/Statement.html

以類似的方式對你做了什麼,只要致電:

Statement stm = Connection.createStatement(); 

然後執行SQL:

stm.execute("SELECT * FROM MYTABLE"); 

搶ResultSet和檢查出來的結果。

儘管如此 - 就安全性而言這是壞的 - 正如其他人所說的,PreparedStatements是有點更安全,但仍不是100%。老實說,雖然基本的JDBC非常簡單,但我真的很討厭所有圍繞代碼散佈的SQL字符串。如果你想要一些更優雅的東西,可以快速瀏覽一下休眠模式 - 它隱藏了你的所有瑣事,而且安裝起來也很容易。

+1

你也應該使用PreparedStatement對象... – atk 2010-09-14 16:25:35

+0

我同意atk,你應該使用PreparedStatement並使用爲它提供的「set」方法添加參數。 – 2010-09-14 16:27:04

+0

請注意,hibernate也會受到注入缺陷的影響。它可以增加價值,但它不是一顆銀子彈。 – atk 2010-09-14 21:42:51