【问题标题】:How do I check if the value already exists in the database?如何检查数据库中是否已存在该值?
【发布时间】:2013-06-22 00:28:41
【问题描述】:

我正在用 Java 创建一个客户端-服务器应用程序。在服务器上我有一个 Microsoft Access 数据库 (SQL),在客户端我有 JFrame 表单。我在客户端和服务器之间进行了通信,并且没有问题。我的表单有一个特定的文本字段(我们称之为txtField)。我需要通过表单将某些数据插入到我的数据库中。但在此之前,需要检查 txtField 中输入的值是否已经存在于数据库中。我该怎么做,以及在哪里编写这段代码,我猜是表格? 谢谢

【问题讨论】:

标签: java database ms-access


【解决方案1】:

我需要通过表单将某些数据插入到我的数据库中。但在此之前,需要检查txtField中输入的值是否已经存在于数据库中。

没有。如果它不存在,您需要将其插入到数据库中。正确的方法是尝试插入并捕获失败。否则,您将在检查和插入之间产生时间窗口问题,在此期间另一个客户端可以进行插入。

【讨论】:

  • 非常重要的一点是关于在 EXISTS 查询和 SELECT 查询之间表元素可能发生变化的时间窗口
【解决方案2】:

你应该这样写你的查询:

Insert into [Table](Field1,Field2) 
    Select Top 1 Val1,Val2 
       FROM
         [Table]
   WHERE NOT EXISTS(SELECT * FROM [Table] Where Field1 = Val1 and Field2 = Val2) 

在这里您可以看到示例: Conditional Insert Query Based on Data in Target Table

【讨论】:

    【解决方案3】:

    下面是我在 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();
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-07-15
      • 1970-01-01
      • 2011-05-16
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 2011-12-22
      • 1970-01-01
      相关资源
      最近更新 更多