如何在 servlet 中显示 mysql_select 结果

How to display mysql_select result in servlet

我已经尝试了一些方法,但我无法获得输出,而且仅仅显示输出屏幕就花费了太多时间.... 例如:在我的情况下,输出应该由 table 组成,其输出是根据我的程序生成的,但它花费太多时间来执行操作,之后它只显示 table headers.....

我用谷歌搜索了这个,但找不到关于这个的合适想法...

感谢任何能提供帮助的人..

这是我的代码:

public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
ResultSet result;
String dat,d,s,i,r;
int numcols,index,ans = 0;
ResultSetMetaData resultMd;
String rs = null;
d= request.getParameter("name");
s= request.getParameter("gen");
i= request.getParameter("indi");
r= request.getParameter("rea");
response.setContentType("text/html");
PrintWriter out=response.getWriter();
if(d!=null && i==null && r==null)
    ans=1;
else if(d!=null && i==null && r!=null)
    ans=2;
else if(d!=null && i!=null && r!=null)
    ans=3;
else if(d==null && i!=null && r!=null)
    ans=4;
else if(d==null && i==null && r!=null)
    ans=5;
else if(d!=null && i!=null && r==null)
    ans=6;
else if(d==null && i!=null && r==null)
    ans=7;

switch(ans)
{
case 1:
    rs="SELECT d.gndr_cod,d.age,d.wt,d.reporter_country,dr.drug_name,i.indi_pt,o.outc_cod,r.pt from demo d,drug dr,indi i,outc o,reac r where dr.drug_name='"+d+"' and d.gndr_cod='"+s+"' limit 25";
    break;
case 2:
    rs="SELECT d.gndr_cod,d.age,d.wt,d.reporter_country,dr.drug_name,i.indi_pt,o.outc_cod,r.pt from demo d,drug dr,indi i,outc o,reac r where dr.drug_name='"+d+"' and r.pt='"+r+"' and d.gndr_cod='"+s+"' limit 25";
    break;
case 3:
    rs="SELECT d.gndr_cod,d.age,d.wt,d.reporter_country,dr.drug_name,i.indi_pt,o.outc_cod,r.pt from demo d,drug dr,indi i,outc o,reac r where dr.drug_name='"+d+"' and r.pt='"+r+"' and i.indi_pt='"+i+"' and d.gndr_cod='"+s+"' limit 25";
    break;
case 4:
    rs="SELECT d.gndr_cod,d.age,d.wt,d.reporter_country,dr.drug_name,i.indi_pt,o.outc_cod,r.pt from demo d,drug dr,indi i,outc o,reac r where r.pt='"+r+"' and i.indi_pt='"+i+"' and d.gndr_cod='"+s+"' limit 25";
    break;
case 5:
    rs="SELECT d.gndr_cod,d.age,d.wt,d.reporter_country,dr.drug_name,i.indi_pt,o.outc_cod,r.pt from demo d,drug dr,indi i,outc o,reac r where r.pt='"+r+"' and d.gndr_cod='"+s+"' limit 25";
    break;
case 6:
    rs="SELECT d.gndr_cod,d.age,d.wt,d.reporter_country,dr.drug_name,i.indi_pt,o.outc_cod,r.pt from demo d,drug dr,indi i,outc o,reac r where dr.drug_name='"+d+"' and i.indi_pt='"+i+"' and d.gndr_cod='"+s+"' limit 25";
    break;
case 7:
    rs="SELECT d.gndr_cod,d.age,d.wt,d.reporter_country,dr.drug_name,i.indi_pt,o.outc_cod,r.pt from demo d,drug dr,indi i,outc o,reac r where i.indi_pt='"+i+"' and d.gndr_cod='"+s+"' limit 25";
    break;
}
out.print("<html>");
out.print("<head><title>Results</title></head>");
out.print("<body>");
try
{
    result=mystmt.executeQuery(rs);
    resultMd=result.getMetaData();
    numcols=resultMd.getColumnCount();
    out.print("<table border='1' width='100%'>");
    out.print("<tr><th>Drug Name</th><th>Sex</th><th>Age</th><th>Weight</th><th>Country</th>");
    out.print("<th>Indication</th><th>Reaction</th><th>Outcome</th>");
    out.print("</tr>");
    while(result.next())
    {
        out.print("<tr>");
        for(index=0; index<=numcols;index++)
        {
            dat=result.getString(index);
            out.print("<td>" +dat+"</td>");
        }
        out.print("</tr>");
    }
    out.print("</table>");
}
catch(Exception e)
{
    e.printStackTrace();
}
out.print("</body></html>");}

首先,测试您的查询,如果有任何性能问题,请尝试解决。可能有大量数据以及无法处理运行时的数据。查看运行时异常或错误的一些日志。

如果您的 SQL 查询运行速度很快并且 returns 行数不多,那么请编辑您的问题并使其尽可能简单。谢谢。 ;)

编辑:

尽量不要连接 SQL 查询,而是使用绑定,因为如果您执行全新的查询,数据库将无法使用统计信息,并且您可能 运行 进入 SQL 注入问题.

编辑 2:

请在 finally 块中关闭您的资源,如果有,请增加您的连接线程限制。只试一个SQL,尽量简单地找出问题的根源。