如何检查数据库中是否已存在该值?

时间:2013-06-22 00:28:42

标签: java database ms-access

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

3 个答案:

答案 0 :(得分:3)

  

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

没有。如果它尚不存在,您需要将其插入数据库。正确的方法是尝试插入并捕获故障。否则,您在检查和插入之间创建了一个计时窗口问题,在此期间另一个客户端可以执行插入。

答案 1 :(得分:1)

你应该写这样的查询:

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

答案 2 :(得分: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();
            }
        }
    }
}