如何检查数据库中是不是已存在该值?
Posted
技术标签:
【中文标题】如何检查数据库中是不是已存在该值?【英文标题】: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 中输入的值是否已经存在于数据库中。我该怎么做,以及在哪里编写这段代码,我猜是表格? 谢谢
【问题讨论】:
Best way to test if a row exists in a mysql table 的可能重复项 【参考方案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();
【讨论】:
以上是关于如何检查数据库中是不是已存在该值?的主要内容,如果未能解决你的问题,请参考以下文章
如何检查 Unity 的 Firebase 数据库中是不是已存在键/值