2016-09-14 79 views
0

我寫這篇文章的代碼使用調用接口註冊一個用戶,呼籲MySQL數據庫存儲過程從我的JSP,這裏的存儲過程的代碼調用從JSP MySQL的存儲過程不更新我的數據庫表

CREATE DEFINER=`root`@`localhost` PROCEDURE `register_customer`(in firstname varchar(45), 
in lastname varchar(45),in contactnumber varchar(45),in username varchar(100), 
in pass varchar(45),in emailid varchar(45),in gender varchar(45)) 
BEGIN 
insert into customers (First_Name,Last_Name,Contact_Number,User_Name,Password,Email_Id,Gender) 
values(firstname,lastname,contactnumber,username,pass,emailid,gender); 
END 

這裏是調用存儲過程

<body> 
    <h1>Hello Account holder</h1> 
    <%! 
    public class SignUp{ 
    String firstname; 
    String secondname; 
    String Gender; 
    String emailid; 
    String password; 
    String rpassword; 
    //connection variables 
    PreparedStatement insert=null; 
    CallableStatement procstate=null; 
    Connection connection=null; 
    String URL=null; 
    String server_user=null; 
    String server_password=null; 

    int result=0; 
    //constructor 
    public SignUp() 
    { 
     try{ 
      URL="jdbc:mysql://localhost:3306/onlinestore"; 
      server_user="root"; 
      server_password="Bitp0cketer"; 
      connection=DriverManager.getConnection(URL,server_user,server_password); 
      // insert=connection.prepareStatement("Insert into customes(First_Name,Last_Name,User_Name,Password,Email_Id,Gender values('?','?','?','?','?','?'))"); 
      procstate=connection.prepareCall("{call register_customer(?,?,?,?,?,?)}"); 

     } 
     catch(SQLException e) { 
      e.printStackTrace();   
     } 
    } 

    public void registeruser(String fn,String ln,String un,String pas,String emailid,String gender) 
    { 
     try{ 
      //insert=connection.prepareStatement("Insert into customers(First_Name,Last_Name,User_Name,Password,Email_Id,Gender) values('"+fn+"','"+ln+"','"+un+"','"+pas+"','"+emailid+"','"+gender+"')"); 

      //result=insert.executeUpdate(); 
      /* storedprocedure calling*/ 

      procstate.setString(1, fn); 
      procstate.setString(2,ln); 
      procstate.setString(3,un); 
      procstate.setString(4,pas); 
      procstate.setString(5,emailid); 
      procstate.setString(6,gender); 

      result =procstate.executeUpdate(); 
     } 
    catch(SQLException e){ 
     e.printStackTrace(); 
     }  

    } 

    } 

    %> 
    <% 
    SignUp sp=new SignUp(); 
    String fn; 
    String ln; 
    String un; 
    String pas; 
    String emailid; 
    String gender; 
    fn=request.getParameter("first"); 
    ln=request.getParameter("last"); 
    un=request.getParameter("username"); 
    emailid=request.getParameter("emailid"); 
    pas=request.getParameter("pas"); 
    gender=request.getParameter("Gender"); 
    String cpass=request.getParameter("cpass"); 
    sp.registeruser(fn, ln, un, pas, emailid, gender); 
    %> 

不會拋出異常,不會產生錯誤,但它並不在我的數據庫中插入一條記錄中的Java代碼,我不知道爲什麼,請查看一下,幫我整理出這個問題..

回答

0

存儲過程被稱爲像

procstate = con.prepareCall("{call register_customer(?,?,?,?,?,?)}"); 
procstate.setString(1, fn); 
procstate.setString(2,ln); 
procstate.setString(3,un); 
procstate.setString(4,pas); 
procstate.setString(5,emailid); 
procstate.setString(6,gender); 
procstate.execute(); 

更新:在您的存儲過程,你有7個參數。但是你在Java代碼中傳遞了6個參數。 contactnumber missing

+0

Insert被註釋掉了,我的實際語句是procstatement,它在registeruser方法中被執行。 – Jawad

+0

我正在做同樣的事情,請注意registeruser方法,procstate得到在構造函數中初始化的IN參數在方法中設置,這就是程序被調用的地方,如果我用簡單的preparedStatment提供給字符串sql查詢它工作正常,但使用存儲過程,它不會執行任何操作。 – Jawad

+0

在您的存儲過程中,您有7個參數。但是你在Java代碼中傳遞了6個值。 'contactnumber'丟失。這可能是問題 – Ponnarasu

相關問題