如果该记录尚不存在但它不起作用,我试图仅将新记录插入数据库

Posted

技术标签:

【中文标题】如果该记录尚不存在但它不起作用,我试图仅将新记录插入数据库【英文标题】:I am trying to only insert a new record into the database if that record doesn't already exist but it isn't working 【发布时间】:2016-07-08 10:53:44 【问题描述】:

这是我的代码,用于在将新记录输入到 sql 数据库之前检查系统中是否已存在记录。

            String sql = "INSERT INTO Stock (name, cost_price, selling_price, numberinstock, supplier) VALUES (?, ?, ?, ?,?) "
                         + "Select name"
                         + " from Stock"
                         + "Where not exists (select * from Stock"
                         + "where name = "+NameTextField+")";

我正在使用 Java、我的 sql 和一个 derby 数据库。 我想做的是当一个新项目进入系统时,sql语句将检查该项目是否已经在系统中。

这个sql语句有什么问题

【问题讨论】:

改为INSERT INTO table (c1, c2, ...) SELECT ... 其中一个原因是“Stock”和“where”之间没有空格。当您提出问题时,您应该包含所有相关信息,例如抛出的任何错误(顺便说一下,您也应该在发帖前阅读并尝试理解)。 我得到的唯一错误是说有一个 sql 错误。 【参考方案1】:

你不能使用insert . . . values 做你想做的事。所以请改用insert . . . select。代码应如下所示:

INSERT INTO Stock(name, cost_price, selling_price, numberinstock, supplier) 
    Select ?, ?, ?, ?, ?
    from sysibm.sysdummy1
    Where not exists (select * from Stock where name = "+NameTextField+");

但是,您应该将第二个对 name 的引用作为参数传递,就像所有其他引用一样:

INSERT INTO Stock(name, cost_price, selling_price, numberinstock, supplier) 
    Select ?, ?, ?, ?, ?
    from sysibm.sysdummy1
    Where not exists (select 1 from Stock where name = ?);

【讨论】:

只是在这里添加一些价值,正如 Gordon Linoff 所说,您应该始终使用参数而不是普通变量(例如字符串),因为您的应用程序更容易受到 SQL 注入的影响。【参考方案2】:

尝试使用触发器

Create Trigger Modified_Order_Trigger
   On Orders
   After Update --as per youe need "insert, delete, update"
   AS

     Insert Into tablename (tables fileds)
       SELECT tablefileds
       FROM INSERTED

【讨论】:

以上是关于如果该记录尚不存在但它不起作用,我试图仅将新记录插入数据库的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用点符号在控制台中记录数据对象但它不起作用,为啥?

如果按钮尚不存在,则 Jquery 添加按钮

验证数组命令

使用Tkinter我试图添加用户输入的值并将其添加到文件中存在的值,但它不起作用

试图为不和谐制作一个聊天机器人,但它不起作用

将Git存储库内容移动到保留历史记录的另一个存储库