PreparedStatement不起作用,即JSP中的ps.executeUpdate()

时间:2015-02-20 03:56:12

标签: jsp jdbc

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();
}
%>

3 个答案:

答案 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();