2013-06-22 107 views
1

我正在用Java創建一個客戶端 - 服務器應用程序。在服務器上,我有一個Microsoft Access數據庫(SQL),並在客戶端上我有JFrame窗體。我有一個客戶端和服務器之間的溝通,它沒有任何問題。我的表單有一個特定的文本字段(我們稱之爲txtField)。我需要通過表單將某些數據插入到我的數據庫中。但在此之前,需要檢查數據庫中是否存在已在txtField中鍵入的值。我如何做到這一點,以及在哪裏編寫這段代碼,我猜想在表單中? 謝謝如何檢查數據庫中是否存在該值?

+0

可能的重複[最好的方法來測試如果行中存在一個MySQL表](http://stackoverflow.com/questions/1676551/bes t-way-to-test-if-a-row-exists-in-a-mysql-table) –

回答

3

我需要通過表單插入某些數據到我的數據庫。但在此之前,需要檢查數據庫中是否存在已在txtField中鍵入的值。

號你需要把它插入到數據庫中,如果它已不存在。正確的方法是嘗試插入並捕獲失敗。否則,您會在您的支票和您的支票之間創建一個時間窗口問題,在此期間另一個客戶端可能會執行插入操作。

+0

非常重要的一點是,當你的EXISTS查詢和SELECT查詢之間的表元素可能發生變化時 –

0

下面我將如何使用參數化查詢做到這一點在Java中:

import java.sql.*; 

public class JDBCQuery { 
    public static void main(String args[]) { 
     Connection conn = null; 
     PreparedStatement s = null; 
     try { 
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
      conn = DriverManager.getConnection(
        "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};" + 
        "DBQ=C:\\Users\\Public\\Database1.accdb;"); 

      String txtField = "Java"; // value to insert 

      s = conn.prepareStatement(
        "INSERT INTO Table1 (thing) " + 
        "SELECT ? AS thing " + 
        "FROM (SELECT COUNT(*) FROM Table1) " + 
        "WHERE NOT EXISTS " + 
         "(" + 
          "SELECT thing FROM Table1 " + 
          "WHERE thing=? " + 
         ")"); 
      s.setString(1, txtField); 
      s.setString(2, txtField); 
      if (s.executeUpdate() > 0) { 
       System.out.println("The row was inserted."); 
      } 
      else { 
       System.out.println("The row was not inserted."); 
      } 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if (s != null) { 
        s.close(); 
       } 
       if (conn != null) { 
        conn.close(); 
       } 
      } catch(Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
相關問題