【问题标题】:trigger to generate account no .on insert into a table触发器生成帐号 .on 插入表中
【发布时间】:2012-09-08 23:23:06
【问题描述】:

我是 java servlet 的初学者,我的问题是我想生成一个帐号。每次我的桌子上都会有一个新帐户。但是触发器不工作请帮助 fname lname 用户名和 pword 等其他值工作正常 servlet 正常,但创建 accno 的触发器不能正常工作

CREATE OR REPLACE TRIGGER T1 BEFORE INSERT ON UINFO
FOR EACH ROW
BEGIN
set new.UACCNO="jith"||to_char(SQ_1.nextval,'FM0009');
END;
/

//this is my servlet prog

String s1=hreq.getParameter("fname");
            String s2=hreq.getParameter("lname");
            String s3=hreq.getParameter("uacc");
            String s4=hreq.getParameter("uname");
            String s5=hreq.getParameter("pword");
            String s6=hreq.getParameter("pword2");
            String s7[]=hreq.getParameterValues("select");
            String s8=hreq.getParameter("uans");
            String s9=hreq.getParameter("ueid");
            PrintWriter pw=hres.getWriter();

    //if passwords match        

        if(s6.equals(s5))
        {

            PreparedStatement pstmt=con.prepareStatement("insert into uinfo(fname,lname,uacc,uname,pword,uques,uans,ueid) values(?,?,?,?,?,?,?,?)");
pstmt.setString(1,s1);
pstmt.setString(2,s2);
pstmt.setString(3,s3);
pstmt.setString(4,s4);
pstmt.setString(5,s5);
for(int i=0;i<s7.length;i++)
{
if(s7[i]!=null)
pstmt.setString(6,s7[i]);

}
pstmt.setString(7,s8);
pstmt.setString(8,s9);
pstmt.executeUpdate();
pw.println("<html><body  bgcolor=wheat text=blue>");
pw.println("<h1>user  "+s4+"  has Registered successfully</h1><br/><br/>");
pw.println("<h3><a href=login.html>Login Now?</a></h3>");
 pw.println("</body></html>");
 }
 else
 {
            pw.println("<html><body  bgcolor=wheat text=blue>");
            pw.println("<h1>**the passwords do not match go back and check</h1>");
            pw.println("</body></html>");
    }

【问题讨论】:

  • servlet 没问题,如果 pawwsords 匹配,它会显示用户已注册,请帮助
  • “创建 accno 的触发器无法正常工作”是什么意思?请格式化并正确缩进您的代码
  • 您是否尝试过从 SQL 提示符插入记录,然后触发触发器?我建议先让这部分工作,然后再担心它的 webapp 部分。
  • 您使用的是什么关系型数据库?如果这是Oracle,那么它应该是“new:UACCNO”,句号不正确。
  • 我正在使用 oracle 但我无法理解如何将字符串附加到 if i new.UACCNO=to_char(SQ_1.nextval,'FM0009') 然后我开始 0001 0002 我想要一个字符串jith00001 jith00002

标签: java servlets jdbc


【解决方案1】:

使用触发器为记录创建一个连续的记录是多余的,你应该从另一个 PreparedStatement 调用序列,如下所示:

PreparedStatement statement = con.prepareStatement( "SQ_1.nextval from dual")  

然后在取出连续后,进行所需的转换以创建您​​的密钥并将其传递到插入语句中。

您的另一个选择是直接在插入语句中传递SQ_1.nextval,但这可能取决于您使用的数据库引擎。

如果它是我怀疑的 oracle,它会是这样的(请注意,下面的示例没有在触发器中进行连接/转换,我将其留给您):

PreparedStatement pstmt=con.prepareStatement(
"insert into uinfo(UACCNO,fname,lname,uacc,uname,pword,uques,uans,ueid) values(SQ_1.nextval,?,?,?,?,?,?,?,?)");

【讨论】:

  • 同意如果在 Oracle 中使用序列是惯用的方式。
猜你喜欢
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
相关资源
最近更新 更多