PreparedStatement不工作。甚至检查打印值只是为了确保没有发送空值.ps.executeUpdate()是它不工作的主要区域。不知道它是否是语法错误。谢谢你为你的时间。
<%@page import="java.sql.*"%>
<%!
String fid,lid,gid,did,mn,yid,sid,cid,eid,aid,uid,pid,sttid,paswd;
Connection con;
Statement st;
PreparedStatement ps,ps1;
%>
<%
uid=(String)session.getAttribute("usr");
paswd=(String)session.getAttribute("pswd");
sttid=(String)session.getAttribute("stfid");
int staid=Integer.parseInt(sttid);
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","sms","vmhs");
String ins="insert into staff values (?,?,?,?)";
ps=con.prepareStatement(ins);
ps.setString(1,uid);
ps.setString(2,paswd);
ps.setInt(3,staid);
ps.setString(4,"active");
int i=ps.executeUpdate();
String upd="update staffinfo set pword=? where uname=?";
ps1=con.prepareStatement(upd);
ps1.setString(11,uid);
ps1.setString(12,paswd);
int j=ps1.executeUpdate();
if(j>0)
{
%>
<jsp:include page="averify.jsp"/>
<script>
alert("Registration verified successfully");
</script>
<%
}
else
{
%>
<jsp:include page="averify.jsp"/>
<script>
alert("Registration failed.Please check connection and try again");
</script>
<%
}
con.close();
}
catch(SQLException e)
{
e.getMessage();
}
%>
答案 0 :(得分:0)
我不太确定您正在使用多少个表。您的插入语句"insert into staff values (?,?,?,?)"
位于员工表中。然后您正在更新"update staffinfo set pword=? where uname=?"
。请澄清它们是否是相同的表格。
另外,我意识到你这样做了:
"update staffinfo set pword=? where uname=?"
ps1.setString(11,uid); // This is username you are passing to password field
ps1.setString(12,paswd);// This is password being passed to username field
int j=ps1.executeUpdate();
你的意思是改为输入:
ps1.setString(1, paswd);
ps1.setString(2, uid);
int j=ps1.executeUpdate();
请试试这个。此外,您应始终在开发阶段打印错误消息,因为每个错误都会通过其描述报告给您。您应该将此行更改为:
catch (SQLException e) {
System.out.println(e.toString());
}
这样您就可以阅读确切的错误消息。这将使您更容易调试错误。
答案 1 :(得分:0)
更新后Commit
交易如何con.commit();
或您也可以使用con.setAutoCommit(true);
):
int i=ps.executeUpdate();
String upd="update staffinfo set pword=? where uname=?";
ps1=con.prepareStatement(upd);
ps1.setString(11,uid);
ps1.setString(12,paswd);
int j=ps1.executeUpdate();
con.setAutoCommit(true);
答案 2 :(得分:0)
您还可以使用下面的.toString()
方法:
所以,而不是:
uid=(String)session.getAttribute("usr");
paswd=(String)session.getAttribute("pswd");
sttid=(String)session.getAttribute("stfid");
int staid=Integer.parseInt(sttid);
您可以尝试:
uid = session.getAttribute("usr").toString();
paswd = session.getAttribute("pswd")toString();
sttid = session.getAttribute("stfid")toString();
int staid = Integer.parseInt(sttid);
为什么数字11和12?
我认为它应该是1和2以及@Michael建议的更改。
而不是:
String upd="update staffinfo set pword=? where uname=?";
ps1=con.prepareStatement(upd);
ps1.setString(11,uid);
ps1.setString(12,paswd);
int j=ps1.executeUpdate();
它应该类似于:
String upd="update staffinfo set pword=? where uname=?";
ps1=con.prepareStatement(upd);
ps1.setString(1,paswd);
ps1.setString(2,uid);
int j=ps1.executeUpdate();