更新中的参数索引超出范围(1>参数数量,即0)

时间:2019-08-07 08:19:05

标签: mysql sql jsp jdbc

我的私人项目有一个问题,它的功能之一(日记修改)。问题是,java.sql.SQLException:参数索引超出UPDATE中的范围(1>参数数量,即0)。

我曾经在编辑列表后转到列表的第一页,但是我将其设置为直接转到查看页面,以便可以检查更正的文本。我找到了google,但是关于INSERT INTO却有错误,但是我在INSERT INTO中没有问题。

代码中唯一发生变化的是try语法中的script标签,因为该变量在变量之前引起了错误,但与已更正的变量不同,它甚至都没有固定。

<%
String dbUrl = "jdbc:mysql://localhost:3306/diary?serverTimezone=UTC";
request.setCharacterEncoding("UTF-8"); 

try {       
    Class.forName("com.mysql.cj.jdbc.Driver");
    Connection conn = DriverManager.getConnection(dbUrl, "root","@Kanamycin1");
    int idx = Integer.parseInt(request.getParameter("idx"));
    int pg = Integer.parseInt(request.getParameter("pg"));
    String title = request.getParameter("title"); 
    String contents = request.getParameter("contents"); 
    contents = contents.replace("\r\n","<br>");

    String sql = "SELECT NUM FROM diary WHERE NUM=" + idx;
    PreparedStatement pstmt = conn.prepareStatement(sql);
    Statement stmt = conn.createStatement();
    sql = "UPDATE diary SET TITLE='" + title+ "' ,CONTENTS='"+ contents +"' WHERE NUM=" + idx; 
    stmt.executeUpdate(sql);

    pstmt.setString(1, title);
    pstmt.setString(2, contents);

    pstmt.execute();
    pstmt.close();

    conn.close();
%>
  <script language=javascript>
   self.window.alert("Modified");
   location.href="view.jsp?idx=<%=idx%>&pg=<%=pg%>"; 
   </script>
<%  
} catch(SQLException e) {
out.println( e.toString() );
} 
%>

这是用于修改著作的SQL代码。 (使用UPDATE时,会发生错误)

<%
String dbUrl = "jdbc:mysql://localhost:3306/diary?serverTimezone=UTC";
request.setCharacterEncoding("UTF-8"); 

try {       
    Class.forName("com.mysql.cj.jdbc.Driver");
    Connection conn = DriverManager.getConnection(dbUrl, "root","@Kanamycin1");

    String sql = "INSERT INTO diary(TIME,TITLE,CONTENTS) VALUES(?,?,?)";
    PreparedStatement pstmt = conn.prepareStatement(sql);
    String time = (new SimpleDateFormat("yyyy-MM-dd")).format( new Date());
    String title = request.getParameter("title"); 
    String cont = request.getParameter("contents"); 
    cont = cont.replace("\r\n","<br>");

    pstmt.setString(1, time);
    pstmt.setString(2, title);
    pstmt.setString(3, cont);

    pstmt.execute();
    pstmt.close();

    conn.close();
} catch(SQLException e) {
out.println( e.toString() );
} 
%>
  <script language=javascript>
   self.window.alert("Saved");
   location.href="index.jsp"; 
   </script>

这是使用INSERT INTO编写的代码。 (没有错误)

因此:

  

错误(java.sql.SQLException:参数索引超出范围(1>数字   的参数,为0))

我根本无法使用纠正句子的能力。

我想知道为什么会发生此错误,并在UPDATE中解决此问题。

1 个答案:

答案 0 :(得分:1)

您在update子句中使用了错误的语法。代码应该是这样的。

    String sql = "SELECT NUM FROM diary WHERE NUM=" + idx;
    PreparedStatement pstmt = conn.prepareStatement(sql);
    pstmt.executeQuery();

    pstmt.close();
    sql = "UPDATE diary SET TITLE=? ,CONTENTS=? WHERE NUM=?"; 
    pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, title);
    pstmt.setString(2, contents);
    pstmt.setString(3, idx);
    pstmt.executeUpdate();