-2

Java サーブレットの初心者です。私の問題は、アカウントを生成したくないことです。毎回、テーブルに新しいアカウントが作成されますが、トリガーが機能しません。fname、lname、ユーザー名、pword などの他の値が正常に機能するように助けてください。サーブレットは問題ありませんが、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>");
    }
4

1 に答える 1

1

トリガーを使用してレコードの連続を作成するのはやり過ぎです。次のように、別のPreparedStatementからシーケンスを呼び出す必要があります。

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

次に、連続したものを引き出した後、必要な変換を行ってキーを作成し、それを挿入ステートメントに渡します。

もう1つのオプションはSQ_1.nextval、insertステートメントで直接渡すことですが、これは使用しているdbエンジンによって異なる場合があります。

私が疑うようにそれがオラクルである場合、それは次のようになります(以下の例はトリガーで行う連結/変換を行っていないことに注意してください、私はそれをあなたに任せます):

PreparedStatement pstmt=con.prepareStatement(
"insert into uinfo(UACCNO,fname,lname,uacc,uname,pword,uques,uans,ueid) values(SQ_1.nextval,?,?,?,?,?,?,?,?)");
于 2012-09-08T23:36:32.223 に答える