Java 插入查询-executeUpdate返回-1

Java 插入查询-executeUpdate返回-1,java,sql-server,jdbc,Java,Sql Server,Jdbc,我正在尝试使用JDBCCONN(java)将记录插入SQL Server。 如果我在java文件中手动复制查询语句,我就能够插入SQL。但它不是从代码中插入的吗 请帮帮我,我犯了什么错误 PreparedStatement PreparedStatement=null; 如果(conn!=null){ System.out.println(“连接成功!”); } //创建一个语句对象 语句sql_stmt=conn.createStatement(); //创建一个语句对象 语句sql_st

我正在尝试使用JDBCCONN(java)将记录插入SQL Server。 如果我在java文件中手动复制查询语句,我就能够插入SQL。但它不是从代码中插入的吗

请帮帮我,我犯了什么错误

PreparedStatement PreparedStatement=null;
如果(conn!=null){
System.out.println(“连接成功!”);
} 
//创建一个语句对象
语句sql_stmt=conn.createStatement();
//创建一个语句对象
语句sql_stmt_1=conn.createStatement();
//PRODUCT表格的结果集
结果集rs=sql_stmt.executeQuery(“从“+strDBName+”[dbo].Product”中选择MAX(ID)、MAX(RG_ID)、MAX(WG_ID));
如果(rs.next()){
//检索自动生成的密钥。
intID=rs.getInt(1);
intRG_ID=rs.getInt(2);
intWG_ID=rs.getInt(3);
}
对于(int iCount=0;iCount
第五行有两个加号
+

+ + (intWG_ID + intRowIncrement) + ...

否则,问题可能出在
IF…
语句中。您可以尝试以下方法:

    sql_stmt_1.executeUpdate(
        " INSERT INTO " + strDBName + ".[dbo].Product ([Name] ,"
      + "[RG_ID],[WG_ID],[Parent_Product]) "
      + " SELECT '" + arrListLevel_1_Unique.get(iCount) + "',"
      + (intWG_ID + intRowIncrement) + ", "
      + (intWG_ID + intRowIncrement + 1) + ", 5828 "
      + " WHERE NOT EXISTS( SELECT 1 FROM " + strDBName
      + ".[dbo].Product WHERE [Name] LIKE '"
      + arrListLevel_1_Unique.get(iCount) + "') "
    ) ;

我认为问题出在“\n”上,您是否尝试过删除“\n”中的这两个,看看它是否有效

实际上,这种实现(使用字符串连接构建SQL字符串)非常糟糕。首先是SQL注入,其次,如果要插入的值包含字符单引号或符号,则会出现问题

相反,您应该使用“准备语句”

在执行之前,将SQL字符串存储到变量中会更整洁。这样您就可以记录它(用于调试),大致如下:

String sqlCommand = "select * from " + tableName;
System.out.println(sqlCommand);
sqlStatement.executeUpdate(sqlCommand);

另外,不建议使用system.out.println进行调试,您应该实现一个适当的日志系统。

您可以提取SQL查询并发布它吗?我觉得代码太多了。如果你需要帮助,你需要把代码减少到尽可能小的片段来说明问题。总之,为了可读性,我编辑了代码。是sql_stmt_1.executeUpdate();调用将数据插入sql表不是正确的吗?@Ramm:You have
not EXISTS
WHERE Name not LIKE
。你确定你需要两张底片吗?@ypercube:我把它拿来做额外的验证。但是如果我在查询分析器中运行insert查询,它就可以工作。这样就不会插入到表中。感谢感谢您提供解决方案。现在插入记录。但对我来说,我的表中已经有了这些记录,未来我希望有更多的数据。在这种情况下,如果我插入它将是一个重复的数据。是否有其他方法可以执行带有“IF EXISTS”的查询??Thanks@Ramm:这就是为什么我在。。。选择。。。不存在的地方…示例。但我仍然认为您需要
不存在的地方(选择…WHERE Name**,如**…
)。注意
LIKE
NOT LIKE
的区别。您还可以在
Product.Name
字段中添加唯一的约束。您不必担心检查插入的重复名称。数据库将这样做。谢谢@ypercube。不知何故,您修改的语句也没有更新表。我有一个ID列,它是该字段上的标识。我无法在[Name]列上添加唯一约束,因为DB是这样设计的:(。最初我有相同的预处理语句。为了缩短代码,我将查询字符串添加到ExecuteUpdate语句中。谢谢
String sqlCommand = "select * from " + tableName;
System.out.println(sqlCommand);
sqlStatement.executeUpdate(sqlCommand);