【问题标题】:SQL Query using where clause in Prepared Statement [duplicate]在准备好的语句中使用 where 子句的 SQL 查询 [重复]
【发布时间】:2017-12-30 07:31:22
【问题描述】:

我正在开发一个门禁系统,我在其中插入时间和时间。为超时编写sql查询时,在WHERE子句处显示错误。我无法解决错误。什么是准确的 SQL 查询?

java.util.Date date = new java.util.Date();
java.sql.Timestamp sqlTime = new java.sql.Timestamp(date.getTime());
PreparedStatement ps = con.prepareStatement("insert into ENTRY(OUTTIME) values(?,?,?,?) WHERE (ENTRY.ROLLNUMBER='"+rollno+"' AND ENTRY.OUTTIME ='NULL')");
ps.setTimestamp(4,sqlTime);
ps.executeUpdate();

【问题讨论】:

  • 为什么插入会有 where 语句?不应该是更新声明吗?
  • 没有这样的语法。

标签: java mysql sql-server database


【解决方案1】:

你需要UPDATE现有的行

PreparedStatement ps = con.prepareStatement("UPDATE ENTRY SET OUTTIME =? WHERE ROLLNUMBER=?");
ps.setTimestamp(1,sqlTime);
ps.setString(2, rollno);

【讨论】:

    【解决方案2】:

    insert 语句不是这样工作的。如果要更新现有记录,则需要 update 语句:

    PreparedStatement ps = 
        con.prepareStatement("UPDATE entry SET outtime = ? WHERE rollbumber = ?");
    ps.setTimestamp(1, sqlTime);
    ps.setInt(2, myRollNo);
    

    【讨论】:

      【解决方案3】:

      insert 语句有一个引用同一记录的WHERE 子句是没有意义的。我提出以下代码:

      java.sql.Timestamp sqlTime = new java.sql.Timestamp(date.getTime());
      String sql = "INSERT INTO ENTRY(OUTTIME) VALUES (?)";
      PreparedStatement ps = con.prepareStatement(sql);
      ps.setTimestamp(1, sqlTime);
      ps.executeUpdate();
      

      【讨论】:

        【解决方案4】:

        您可以更新或更改您的插入语句,如下所示:

        "insert into ENTRY(OUTTIME) select col1 from ENTRY WHERE ENTRY.ROLLNUMBER='"+rollno+"' AND ENTRY.OUTTIME ='NULL'"
        

        【讨论】:

          【解决方案5】:

          使用此代码

          java.util.Date date = new java.util.Date();
          java.sql.Timestamp sqlTime = new java.sql.Timestamp(date.getTime());
          PreparedStatement ps = con.prepareStatement("update ENTRY set OUTTIME= ?  WHERE ENTRY.ROLLNUMBER='"+rollno+"' AND ENTRY.OUTTIME is NULL");
          ps.setTimestamp(4,sqlTime);
          ps.executeUpdate();
          

          【讨论】:

          • 这个答案容易被SQL注入。
          猜你喜欢
          • 2020-06-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-11
          • 1970-01-01
          • 1970-01-01
          • 2020-12-08
          相关资源
          最近更新 更多