【问题标题】:Update a record if ID exist else Insert values如果 ID 存在则更新记录,否则插入值
【发布时间】:2023-03-10 05:55:01
【问题描述】:

如果记录存在,我将尝试更新值,否则将值插入数据库。但是,这是行不通的。我写了下面的代码。

 String sqlCheck = "Select * from [UAP].[dbo].[UAP_EMPLOYEE] where EMP_EMPLOYEE_ID = '"+empId+"' ";
    PreparedStatement prpStatementCheck = conn.prepareStatement(sqlCheck);
    prpStatementCheck.setString(1, EMP_EMPLOYEE_ID);
    ResultSet rsCheck=prpStatementCheck.executeQuery();
    String check=null;

     while((rsCheck.next())
    {
         if(rsCheck.next()>0)
          update statement; 
         else
             Insert Statement; 
    }

【问题讨论】:

  • 调试时遇到什么错误?它发生在哪一行?
  • 没有SQL injection可以试试吗?

标签: java sql-server jsp


【解决方案1】:

setString 应该与绑定变量一起使用: 您的 sql 字符串应如下所示:

"Select * from [UAP].[dbo].[UAP_EMPLOYEE] where EMP_EMPLOYEE_ID = ?"

您的 SqlServer 的版本是多少? 如果是 2008 或更高版本,您可以利用 UPSERT 命令。

【讨论】:

    【解决方案2】:

    只有当员工存在时才会执行条件 while((rsCheck.next())。 否则,该代码

    if(rsCheck.next()>0)
          update statement; 
         else
             Insert Statement; 
    

    无法访问。 你可以使用类似的东西:

    boolean exists = false;
    
     while((rsCheck.next())
    {
         update statement; 
         exists = true;
    }
    if(!exists) insert statement; 
    

    【讨论】:

    • 如果 id 是关键,你可以只 if(rs.next()) update else insert
    【解决方案3】:

    由于 EMP_EMPLOYEE_ID 字段是 INTEGER 类型,请使用 setInt 而不是 setString

    String sqlCheck = "Select * from [UAP].[dbo].[UAP_EMPLOYEE] where EMP_EMPLOYEE_ID = ?";
    PreparedStatement prpStatementCheck = conn.prepareStatement(sqlCheck);
    prpStatementCheck.setInt(1, EMP_EMPLOYEE_ID);
    

    【讨论】:

    • Reimeus,EMP_EMPLOYEE_ID 是 DB 中的整数。
    猜你喜欢
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    相关资源
    最近更新 更多