Java SQL CALLABLE语句-索引超出范围
我在数据库中使用JavaServlets,我总是会遇到“索引2超出范围”的错误。我只想从表单发送参数名和消息,并通过过程保存到数据库中。为什么我会收到这个错误消息 Add.jspJava SQL CALLABLE语句-索引超出范围,java,database,jsp,servlets,jdbc,Java,Database,Jsp,Servlets,Jdbc,我在数据库中使用JavaServlets,我总是会遇到“索引2超出范围”的错误。我只想从表单发送参数名和消息,并通过过程保存到数据库中。为什么我会收到这个错误消息 Add.jsp <p>${result}</p> <form action="Servlet" method="post"> <div class="comment-form"> <input type="hidden" name="
<p>${result}</p>
<form action="Servlet" method="post">
<div class="comment-form">
<input type="hidden" name="action" value="4">
<p class="name">
<label>Name:</label>
<input type="text" name="name" value="${param.name}">
</p>
<p class="text">
<label>Message:</label>
<textarea name="message"></textarea>
</p>
<p class="submit">
<input type="submit" name="btnComment" value="Add">
</p>
</div>
</form>
程序添加
CREATE PROCEDURE procAdd (
@Name VARCHAR (50),
@Message VARCHAR(50))
AS
BEGIN
INSERT INTO Comments(Name, Date, Message) VALUES (@Name, GETDATE(), @Message)
END
使用由
连接#prepareCall(String)
返回的CallableStatement
上的setter方法,将传递的对象分配给字符串中找到的每个?
的索引,从1
开始。由于您只有一个?
,因此只能设置一个。您的第二个setter调用:
stat.setString(2, message);
因此将失败并抛出您看到的异常
因为过程有两个参数,所以应该这样调用它
stat = con.prepareCall("{CALL procAdd(?, ?)}");
stat.setString(1, name);
stat.setString(2, message);
stat = con.prepareCall("{CALL procAdd(?, ?)}");
stat.setString(1, name);
stat.setString(2, message);