2013-06-20 34 views
-4

您好我有代碼java swing插入表中的2行sql 和我插入表2 jtextfields,我在框架中設置 所以我想不插入行,如果我設置相同的文本在JTextFields將插入重複當我執行programm

這是代碼:

Connection conn = null; 
    Statement stmt = null; 
    try{ 
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/"+db, "root", "123456"); 
stmt = conn.createStatement(); 
stmt.executeUpdate("INSERT INTO router(hostname,address,version)VALUES('Edge 01','"+jTextField1.getText()+"','2700')") ; 
stmt.executeUpdate("INSERT INTO router(hostname,address,version) VALUES('Edge 02','"+jTextField2.getText()+"','2700)") ; 
stmt.close(); 
conn.close(); 

    } 
     catch(SQLException ek){ 
     } 

謝謝

+2

您有SQL注入漏洞。 – SLaks

+1

您正在尋找'if'語句的奇蹟。 (用一串字符串比較) – SLaks

+2

換句話說,你有什麼嘗試?你有什麼問題? – SLaks

回答

1

有兩個可能的選擇:

  1. 嘗試使用select語句檢索記錄,並且僅在將結果選擇爲ZERO記錄時插入。
  2. 在數據庫表列創建一個唯一的鍵/索引,並讓插入觸發器。插入將失敗,如果重複,但您需要處理例外(重複/唯一)。

如果可能,請將兩個步驟一起應用,否則請選擇更適合您的其他業務方案的步驟之一。

0

我建議你從未曾經,在String S編譯查詢。使用PreparedStatement

現在,與此同時。您需要首先查詢數據庫以查看它是否包含所需值,如果它沒有插入它。

爲了清晰起見,將此邏輯轉換爲單獨的方法。並且總是關閉finally塊中的資源,否則如果存在Exception,則會發生內存泄漏。我已經使用了Java 7 try-with-resources構造。

public boolean insertIfNotPresent(final Connection con, final String value) throws SQLException { 
    final String checkQuery = "SELECT COUNT(*) FROM router where hostname='Edge 01' and version=2700 and address=?"; 
    try (final PreparedStatement statement = con.prepareStatement(checkQuery)) { 
     statement.setString(1, value); 
     try (final ResultSet resultSet = statement.executeQuery()) { 
      if (resultSet.next() && resultSet.getInt(1) > 0) { 
       return false; 
      } 
     } 
    } 
    final String insertQuery = "INSERT INTO router SET hostname='Edge 01', version=2700, address=?"; 
    try (final PreparedStatement statement = con.prepareStatement(insertQuery)) { 
     statement.setString(1, value); 
     statement.executeUpdate(); 
    } 
    return true; 
} 

因此,第一個查詢SELECT COUNT(*) ...對與條件匹配的行進行計數。如果數據庫中已有東西,則返回false

如果我們沒有從第一部分返回false,第二個查詢將執行插入操作。在這種情況下該方法返回true

如上面的代碼的例子,像下面將工作

try(final Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/"+db, "root", "123456")) { 
    insertIfNotPresent(conn, jTextField1.getText()); 
    insertIfNotPresent(conn, jTextField2.getText()); 
} 
+0

即時通訊工作在netbeans swing我怎樣才能在代碼中插入這個代碼 –

+0

我已經添加了一個簡單的例子。如果你不知道如何使用方法,那麼我建議你閱讀[this](http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html)。 –

+0

是的即時通訊閱讀和測試,但我有一些錯誤 –