如果该记录尚不存在但它不起作用,我试图仅将新记录插入数据库
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
【讨论】:
以上是关于如果该记录尚不存在但它不起作用,我试图仅将新记录插入数据库的主要内容,如果未能解决你的问题,请参考以下文章