Java 我尝试仅在新记录不存在时将其插入数据库';虽然不存在,但它是';行不通

Java 我尝试仅在新记录不存在时将其插入数据库';虽然不存在,但它是';行不通,java,sql,derby,Java,Sql,Derby,下面是我的代码,在将新记录输入sql数据库之前,检查系统中是否已经存在记录 String sql = "INSERT INTO Stock (name, cost_price, selling_price, numberinstock, supplier) VALUES (?, ?, ?, ?,?) " + "Select name" + " from Stock"

下面是我的代码,在将新记录输入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。值
。所以使用
insert。改为选择
。代码应该如下所示:

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 = ?);

您不能使用
insert。值
。所以使用
insert。改为选择
。代码应该如下所示:

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 = ?);
尝试使用触发器

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
尝试使用触发器

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

请选择“<代码>插入表(c1,c2,…”)而不是选择…。原因之一是“库存”和“位置”之间缺少空格。当你提问时,你应该包括所有相关信息,就像抛出的任何错误一样(顺便说一句,你也应该在发布前阅读并尝试理解)。我得到的唯一错误是一个表示存在sql错误的错误。请选择…“插入到表中(c1,c2,…)”。原因之一是“库存”和“位置”之间缺少空格。当你问一个问题时,你应该包括所有相关的信息,比如抛出的任何错误(顺便说一句,你也应该在发布之前阅读并尝试理解)。我得到的唯一错误是一个错误,说有sql错误。正如Gordon Linoff所说,在这里添加一些值,在使应用程序更容易进行SQL注入时,应始终使用参数而不是普通变量(例如字符串)。正如Gordon Linoff所说,在使应用程序更容易进行SQL注入时,应始终使用参数而不是普通变量(例如字符串)。