2013-07-27 34 views
0

我正在开发一个在线银行应用程序,这是我卡住的一部分。检索插入到数据库中的最后一行

- >用户在HTML页面上显示一个表单以输入他们的详细信息,以创建一个帐户。

- >然后将详细信息输入MySQL数据库,并将用户重定向到JSP页面,在那里他应该显示他的帐号(使用MySQL自动递增功能自动生成)和一个秘密的4位数字引脚(每个用户随机生成,而不是自动增量)。

从我的Servlet的doPost()方法的代码sinppet插入在DB值和重定向到JSP是这里 -

try { 
Class.forName("com.mysql.jdbc.Driver"); 
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/inb", "root", "root"); 

//The user's password has to be converted into a salted hash before storing in the database. 
String hashed_password=CreateDigest.getPasswordDigest(request.getParameter("password")); 

PreparedStatement ps=con.prepareStatement("insert into inb.users values (NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); 
     ps.setString(1, request.getParameter("name1")); 
     ps.setString(2, request.getParameter("name2")); 
     ps.setString(3, request.getParameter("name3")); 
     ps.setString(4, request.getParameter("dob")); 
     ps.setInt(5, Integer.parseInt(request.getParameter("age"))); 
     ps.setString(6, request.getParameter("email")); 
     ps.setString(7, request.getParameter("mobnum")); 
     ps.setString(8, request.getParameter("address1")); 
     ps.setString(9, request.getParameter("address2")); 
     ps.setString(10, request.getParameter("pannum")); 
     ps.setString(11, request.getParameter("aadhar")); 
     ps.setString(12, hashed_password); 
     ps.setString(13, request.getParameter("acc_bal")); 
     ps.setInt(14, pin); 

      int i=ps.executeUpdate(); 


    //Check if records have been actually been inserted or not. 
     if (i>0) { 
      response.sendRedirect("AccountOpened.jsp"); 
     } 

    } catch (ClassNotFoundException | SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

现在,这是JSP代码以显示帐户没有。和用户 的引脚(last_acc_no和last_pin都在我的Servlet类,我创建没有和引脚保持最后插入的帐户的静态变量。)

<% 
String acc_no=CreateAccount.last_acc_No; 
int pin=CreateAccount.last_pin; 
%> 
<h3>Congratulations ! Your account has been created.</h3>. 
<br/><br/> 
Your Account Number Is : <b> <%= acc_no %> </b> 
<br/><br/> 
Your Secret PIN No. Is : <b> <%= pin %> </b> 

现在,我要检索的account_no上和销最后插入的用户,以便我可以在JSP页面上显示它。我无法弄清楚这个方法。

+0

servlet类中的'static'变量** ** **!接下来的事情是不要在JSP中使用sriptlets!一个问题,为什么你使用'redirect()'而不是'RequestDispatcher'? – NINCOMPOOP

+0

@TheNewIdiot更糟糕的是:OP手动创建数据库连接而不是使用数据库连接池,在此应用程序中模型和控制器之间没有区别,同时也表明缺乏开发用于维护目的的分层应用程序的知识。 –

回答

0
try { 
Class.forName("com.mysql.jdbc.Driver"); 
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/inb", "root", "root"); 

//The user's password has to be converted into a salted hash before storing in the database. 
String hashed_password=CreateDigest.getPasswordDigest(request.getParameter("password")); 

PreparedStatement ps=con.prepareStatement("insert into inb.users values (NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", , Statement.RETURN_GENERATED_KEYS); 
     ps.setString(1, request.getParameter("name1")); 
     ps.setString(2, request.getParameter("name2")); 
     ps.setString(3, request.getParameter("name3")); 
     ps.setString(4, request.getParameter("dob")); 
     ps.setInt(5, Integer.parseInt(request.getParameter("age"))); 
     ps.setString(6, request.getParameter("email")); 
     ps.setString(7, request.getParameter("mobnum")); 
     ps.setString(8, request.getParameter("address1")); 
     ps.setString(9, request.getParameter("address2")); 
     ps.setString(10, request.getParameter("pannum")); 
     ps.setString(11, request.getParameter("aadhar")); 
     ps.setString(12, hashed_password); 
     ps.setString(13, request.getParameter("acc_bal")); 
     ps.setInt(14, pin); 

      int i=ps.executeUpdate(); 


    //Check if records have been actually been inserted or not. 
      ResultSet rs = ps.getGeneratedKeys(); 
      if(rs.next()) 
      { 
       int id = rs.getInt(1); 
      request.setAttribute("id", id); 
      request.setAttribute("pin", pin); 
      request.getRequestDispatcher("AccountOpened.jsp").forward(request, response); 
     } 

    } catch (ClassNotFoundException | SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

在JSP页面:

<h3>Congratulations ! Your account has been created.</h3>. 
<br/><br/> 
Your Account Number Is : <b> <%= request.getAttribute("id")%> </b> 
<br/><br/> 
Your Secret PIN No. Is : <b> <%= request.getAttribute("pin") %> </b> 
+0

@ elbek-它的工作。非常感谢你。 – plutonium1991

+0

@TheNewIdiot-谢谢你给我的信息,我不知道。但是,你能告诉我在servlet中使用静态变量有什么缺点,为什么我们不应该在JSP页面中使用scriptlet? – plutonium1991

+0

@ plutonium1991,那些是请求范围属性。 Servelt可能不是线程安全的。检查范围和servlet线程安全属性。 Aslo不要忘记接受回答 – Elbek

0

你有没有考虑在t-sql使用Return SCOPE_IDENTITY()

int i返回的帐号 - 应该是。这样你就不必担心它是数据库中最重要的条目。严格地说你只是想创建最后一个记录是危险的。用户A和用户B可能会在同一时间创建一个帐户,并得到纠结/交叉的帐户信息。一旦你有“int i”的accountNumber,那么你应该没有问题重新从数据库中获取这些信息?

这有帮助吗?

+0

@ fenix-诠释我只返回不。插入数据库中的记录,这很可能是1.这不是账号。我只是想要从数据库中获取帐户号码并将其显示给用户。银行是否会给予用户的acc?不对他? – plutonium1991

+0

@Luiggi门多萨 - 我是一名学习java技术的学生,而不是像你这样的专业人士。这个项目是我暑期培训的一部分。 – plutonium1991

相关问题