【问题标题】:How to display mysql_select result in servlet如何在 servlet 中显示 mysql_select 结果
【发布时间】:2015-03-27 09:04:49
【问题描述】:

我已经尝试了一些东西,但我无法获得输出,而且它花费了太多时间来显示输出屏幕...... 例如:在我的情况下,输出应该包含一个表,其输出是根据我的程序生成的,但是它花费了太多时间来执行操作,之后它只显示表标题....

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

感谢任何可以提供帮助的人。

这是我的代码:

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>");}

【问题讨论】:

  • 签入调试器或打印numcols 得到的内容。还要检查您的服务器日志中是否有任何堆栈跟踪。而indexgetString() 从 1 开始,而不是从 0 开始。

标签: java mysql servlets


【解决方案1】:

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

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

编辑:

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

EDIT2:

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

【讨论】:

  • 我在 sql 中测试了这些查询,它们在几秒钟内执行,但在 servlet 中我现在等待大约 30 分钟
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 2021-04-11
  • 2019-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多