我的私人项目有一个问题,它的功能之一(日记修改)。问题是,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中解决此问题。
答案 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();