使用" WHERE"进行SELECT查询子句不返回我的jsp表中的值

时间:2017-04-29 18:09:01

标签: java mysql jsp servlets

尝试从数据库中检索记录。在eclipse上验证了与数据库的连接,但是没有在jsp表上更新信息。我使用servlet类进行调度,使用java类进行数据库复制(模型),使用jsp(view)来显示表。

这是包含" forRecipient"的MyUtils.DbAcess类。方法`

   package myPackage.Utils;

   import java.sql.PreparedStatement;
   import java.sql.ResultSet;
   import java.sql.SQLException;
   import java.util.ArrayList;
   import java.util.List;

   import javax.servlet.RequestDispatcher;

   import java.sql.Connection;

   import myPackage.beans.MatchTable;
   import myPackage.beans.PhedUser;
   import myPackage.beans.UserAccount;

   public class DbAcess {

    .
    .
    .


    public static MatchTable forRecipient(Connection conn, String 
    recipient) throws SQLException  {
    String  query   =   "SELECT payer, payerPhone, payerEmail FROM 
    match_table WHERE recipientAccName=?;";

    PreparedStatement   ps  =   conn.prepareStatement(query);

    ps.setString(1, recipient);

    ResultSet rs    =   ps.executeQuery();
    List    <MatchTable>     list   =   new ArrayList<MatchTable>();

    while(rs.next())    {
        String  payer   =   rs.getString("payer");
        String  payerPhone  =   rs.getString("payerPhone");
        String  payerEmail  =   rs.getString("payerEmail");


        MatchTable  payerDetails    =   new MatchTable();

        payerDetails.setPayer(payer);
        payerDetails.setPayerPhone(payerPhone);
        payerDetails.setPayerEmail(payerEmail);
        list.add(payerDetails);
    }
return  list;

}

这是我的数据库模型,即MatchTable.java

   package myPackage.beans;

   import java.io.Serializable;

   public class MatchTable implements Serializable {


   private  String  payer, payerPhone, payerEmail, recipientAccName, 
   recipientBankName, recipientAccNumber,  recipientPhone;

public MatchTable() {
    // TODO Auto-generated constructor stub
}


public  MatchTable(String payer, String payerPhone, String payerEmail)  {
    this.payer  =   payer;
    this.payerPhone =   payerPhone;
    this.payerEmail =   payerEmail;
}

public MatchTable(String    recipientAccName, String recipientBankName, String recipientAccNumber, String recipientPhone)   {
    this.recipientAccName   =   recipientAccName;
    this.recipientBankName      =   recipientBankName;
    this.recipientAccNumber =   recipientAccNumber;
    this.recipientPhone =   recipientPhone;

}

public  String  getPayer()  {
    return payer;
}
public void setPayer        (String payer)  {
    this.payer  =   payer;
}

public String   getPayerPhone() {
    return payerPhone;
}
public void setPayerPhone(String payerPhone)    {
    this.payerPhone = payerPhone;
}

public String getPayerEmail()   {
    return payerEmail;
}
public void setPayerEmail(String payerEmail)    {
    this.payerEmail =   payerEmail;
}


public String getRecipientAccName() {
    return recipientAccName;
}
public void setRecipientAccName(String recipientAccName) {
    this.recipientAccName = recipientAccName;
}


public String getRecipientBankName() {
    return recipientBankName;
}
public void setRecipientBankName(String recipientBankName) {
    this.recipientBankName = recipientBankName;
}

public String getRecipientAccNumber()   {
    return recipientAccNumber;
}
public void setRecipientAccNumber(String    recipientAccNumber) {
    this.recipientAccNumber =   recipientAccNumber;
}

public String getRecipientPhone() {
    return recipientPhone;
}
public void setRecipientPhone(String recipientPhone) {
    this.recipientPhone = recipientPhone;
}

}

然后我打电话给&#34; DbAcess.forRecipient&#34;我的Servlet类中的方法和请求调度来查看jsp文件&#34; ghTransactions&#34;下面;

package myPackage.servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import myPackage.Utils.DbAcess;
import myPackage.Utils.SessionAccess;
import myPackage.beans.MatchTable;
import myPackage.beans.UserAccount;

/**
  * Servlet implementation class GHTransaction
 */
@WebServlet(urlPatterns={"/ghTransactions"})
public class GHTransactionServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public GHTransactionServlet() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    //response.getWriter().append("Served at: ").append(request.getContextPath());
    HttpSession session =   request.getSession();
    Connection conn =   SessionAccess.getStoredConnection(request);
    //Get stored match details
    //MatchTable    payerDetails    =   SessionAccess.getStoredMatchTable(session);

    String errorString  =   null;
    String payer = null;
    String  payerPhone = null;
    String  payerEmail  =   null;

    MatchTable Payer    =   new MatchTable(payer, payerPhone, payerEmail);
    //Get loggedInUser Details to retrieve user account name for query to match table database
    UserAccount loggedInUser    =   SessionAccess.getStoredLoggedInUser(session);
    String  recipientAccName    =   loggedInUser.getAccountName();
    try{
        DbAcess.forRecipient(conn, recipientAccName);
    } catch (SQLException e)    {
        e.printStackTrace();
        errorString =   e.getMessage();
    }
    request.setAttribute("user", loggedInUser.getUserName());
    request.setAttribute("payer", Payer);
    RequestDispatcher dispatcher    =   request.getServletContext().getRequestDispatcher("/WEB-INF/views/ghTransactionView.jsp");
    dispatcher.forward(request, response);
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);
}

}

我的stackTrace快照显示与数据库的成功连接

 Sat Apr 29 18:54:11 WAT 2017 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

但是,即使存在匹配的详细信息,也不会使用记录填充视图。

以下是ghTransactionView.jsp文件

  <section id="about">
    <div class="container">
  <div class="row">
    <center>
    <h3>Payer Details</h3>
    <table style="width:100%; padding:6px;" border="1" cellpadding="3" cellspacing="3">
        <tr>
            <th>&nbsp;Name</th>
            <th>&nbsp;Phone</th>
            <th>&nbsp;Email</th>
        </tr>
        <c:forEach items="${payer }" var="payerDetails">
        <tr>
            <td>${payerDetails.payer }</td>
            <td>${payerDetails.payerPhone }</td>
            <td>${payerDetails.payerEmail }</td>
        </tr>
    </table>
    </center>
    </div>
</div>
</section>

我需要协助我出错的地方以及没有填写记录的原因。 谢谢。

1 个答案:

答案 0 :(得分:0)

您没有收集查询列表并将其传递给JSP,即从forRecipient返回的数据尚未使用。

因此,您需要在GHTransactionServlet doGet()方法中添加以下代码:

//Collect the returned list using a ref. variable
List<MatchTable> matchTableList =DbAcess.forRecipient(conn, recipientAccName);
//Now set the data to request scope so that JSP can access it
request.setAttribute("payer", matchTableList);

此外,重要的一点是,request范围matchTableList对象的密钥设置为payer,与标记的items属性相同{ JSP中的{1}}。