【发布时间】:2014-02-26 19:35:35
【问题描述】:
我正在尝试调用一个存储过程,我将 7 个值插入到一个表中。但是下面的代码不起作用,请告诉我我做错了什么?
我没有收到任何错误,页面只是保持静态,尽管在成功执行查询后假设重定向到新页面。
public class admincontrol extends TagSupport
{
HttpServletRequest request;
HttpServletResponse response;
String msg="";
public int doStartTag() throws JspException
{
request=(HttpServletRequest)pageContext.getRequest();
response=(HttpServletResponse)pageContext.getResponse();
return EVAL_PAGE;
}
public void check ()
{
JspWriter out=pageContext.getOut();
Connection con;
CallableStatement stmt;
ResultSet rs;
try
{
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch(ClassNotFoundException ex)
{
out.println(ex.getMessage());
}
HttpSession mysession=request.getSession();
String sess=(String)mysession.getAttribute("user");
String rr=(String)adminmodel.time.trim();
String tempid=(String)adminmodel.employeid.trim();
String tdept=(String)adminmodel.department.trim();
String tsup=(String)adminmodel.supervisor.trim();
String tact=(String)adminmodel.action.trim();
String tdate=(String)adminmodel.date.trim();
HttpSession session1=request.getSession();
session1.setAttribute("requestnum",rr);
Random rand = new Random();
int r= rand.nextInt(80001) + 19999;
String reff = String.valueOf(r);
if (!tempid.matches(".*[%#^<>&;'\0-].*") && !tdept.matches(".*
[%#^<>&;'\0-].*") && !tsup.matches(".*[%#^<>&;'\0-].*"))
{
if (tempid.equals(sess) )
{
if (adminmodel.department!="" && adminmodel.supervisor!="" && adminmodel.action!="" && adminmodel.date!="" && adminmodel.time!="")
{
try
{
con= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","gaurav","oracle");
stmt=con.prepareCall("begin requestdetail (?,?,?,?,?,?,?); end;");
stmt.setString(1,tempid);
stmt.setString(2,tsup);
stmt.setString(3,tdept);
stmt.setString(4,tact);
stmt.setString(5,tdate);
stmt.setString(6,rr);
stmt.setString(7,reff);
rs=stmt.executeQuery();
response.sendRedirect("requestnum.jsp");
}
catch(SQLException ex)
{
out.println(ex.getMessage());
}
catch(Exception ex)
{
out.println(ex.getMessage());
}
}
else
out.println("Enter complete details");
}
else
out.println("Incorrect Employee Id");
}
else
out.println("Invalid Details ");
}
catch(Exception ex)
{
}
}
public int doEndTag() throws JspException
{
check();
return super.doEndTag();
}
}
下面是存储过程
create or replace procedure requestdetail (id number, sup varchar2, department varchar2,aaction varchar2, adate number,atime number, ref number)
is
begin
insert into myadmin(employe_id,supervisor,department,action,sdate,stime,reference_no)values (id,sup,department,aaction,adate,atime, ref);
end;
/
【问题讨论】:
-
'Not working' 不是有效或有用的错误消息。请始终说出您遇到的错误或意外行为,以及您期望发生的情况。我假设您从调用本身中得到诸如“错误的参数数量或类型”或“无效的标识符”之类的信息。您的程序也可能无效;第一列真的叫
employe_id,而不是employee_id?如果它“编译时出现警告”,则执行show errors或select * from user_errors以查看问题所在。 -
我已经更新了整个代码,请看一下。我没有收到任何错误,页面只是保持静态,尝试使用 stmt=con.prepareCall("{ call requestdetail (?,?,?,?,?,?,?) }");和 stmt=con.prepareCall("begin; requestdetail (?,?,?,?,?,?,?); end;");没有任何作用
-
msg会发生什么?如果您没有得到您期望的重定向,那么您似乎可能在某个地方遇到了异常。tempid是否真的匹配sess- 听起来他们在管理页面上会有所不同,但不确定这是在做什么。这似乎是一个 JSP 调试问题,尽管您现在的 DB 调用是错误的...... -
这就是问题所在,既没有执行查询,也没有出现任何异常。我确保在提交之前满足所有条件但仍然没有运气。
-
你怎么知道你没有遇到异常 -
check是如何调用的,你如何处理返回的msg值;它是否在某处显示或记录?你在做哪些调试来查看方法内部发生了什么?