刚学写JSP来着  还把所有的代码就堆到一个页面里面的..... 现在出问题了,写这个JSP的目的就是用户输入一个时间段 程序根据输入的时间段 响应结果。现在不知道怎么初始化sql语句中的datefrom和dateto了......  大大门给我想个办法吧......<%@ page contentType="text/html; charset=gb2312" language="java" autoFlush="true" import="java.sql.*" errorPage="" %>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>每日错误查询</title>
<% 
response.addHeader("Cache-Control","no-cache");
response.addHeader("Expires","Thu,01 Jan 1970 00:00:01 GMT");
%>
</head>
<body bgcolor="#FFFFFF">
<form action="ErrorTotal.jsp" method="post">
<table width="95%" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
       <tr>
           <td width="15%" align="left" valign="middle" bgcolor="#D8E9DD" class="style8">省份ID(ProvinceId):
             <select name="provinceid">
             <option value="0">所有省份</option>             
             <option value="201" >广东省</option>
 </select>
  &nbsp;&nbsp;业务ID:
 </select>
             <select name="serviceid">
             <option value="0" selected>业务代码为0</option>            
             <option value="7" >业务代码为7</option>
        <option value="144" >业务代码为144</option>            
             </select>
            </td> 
       </tr>
   
       <tr>
         <td align="left" valign="middle" bgcolor="#339900" >开始时间:
            <input type="text" name="datefrom" value="2005-01-01">yyyy-mm-dd
 </td>
       </tr>
      
   <tr>
         <td align="left" valign="middle" bgcolor="#339900" >结束时间:
   <input type="text" name="dateto" value="2005-01-01">yyyy-mm-dd
   <input type="submit" name="Submit" value="提交" >
 </td>
       </tr>
  
       <tr>
         <td bgcolor="#9FCAAC">
           <div align="center">详细列表</div></td>
       </tr>
     </table>
          <table width="95%" border="0" align="center" cellpadding="0" cellspacing="2" bgcolor="#FFFFFF">
        
<tr bgcolor="#D8E9DD" >
           <td width="153" height="25" >错误发生时期</td>
           <td width="100">错误类型</td>
           <td width="100">错误统计</td>
         </tr>
<%
Connection conn=null;

Statement stmt=null;
ResultSet rsdate=null;

Statement stmt1=null;
ResultSet rstype=null;

Statement stmt2=null;
ResultSet rsnum=null;

Statement stmt3=null;
ResultSet total=null;



String sDBDriver = "oracle.jdbc.driver.OracleDriver";
        Class.forName(sDBDriver).newInstance();
        conn = DriverManager.getConnection("java:oracle:thin:@localhost:1521:freevoc","platform","platform1234");
        stmt = conn.createStatement();
        rsdate = stmt.executeQuery("select distinct to_char(senddate,'yyyy-mm-dd') as senddate from tblsendsmshistory  where to_char(senddate,'yyyy-mm-dd') between '"+datefrom+"' and '"+dateto+"'");



while(rsdate.next())
{
     String datestr = rsdate.getString("senddate");              stmt1 = conn.createStatement();               
         rstype = stmt1.executeQuery("select distinct errorcode from tblsendsmshistory where to_char(senddate,'yyyy-mm-dd')='"+datestr+"' and errorcode!='null'");
   
    while(rstype.next())
{             
out.println("<tr bgcolor=\"#D8E9DD\" >");

out.println("<td width=\"153\" height=\"25\" >"+datestr+"</td>");
String typestr = rstype.getString("errorcode");
out.println("<td width=\"100\">"+typestr+"</td>");
stmt2 = conn.createStatement();               
                  rsnum = stmt2.executeQuery("select count(*) from tblsendsmshistory where errorcode='"+typestr+"' and to_char(senddate,'yyyy-mm-dd')='"+datestr+"'");
                  rsnum.next();
int errornum = rsnum.getInt(1);
    out.println("<td width=\"100\">"+errornum+"</td>");
out.println("</tr>");
}

}
if(rstype!=null)rstype.close();
         if(stmt1!=null)stmt1.close();

if(rsnum!=null)rsnum.close();
         if(stmt2!=null)stmt2.close();

         if(rsdate!=null)rsdate.close();
         if(stmt!=null)stmt.close();

//stmt3 = conn.createStatement();               
             //rstotal = stmt3.executeQuery("select count(*) from tblsendsmshistory where errocode!='null'");
//rstotal.next();
//int total = rstotal.getInt(1);
//out.println("<tr bgcolor=\"#D8E9DD\" >");

         if(conn!=null)conn.close();
  %>
             
      </table>         
    </div>这里是留着做最后统计的
</form>
</body>
</html>

解决方案 »

  1.   

    stmt.executeQuery("select distinct to_char(senddate,'yyyy-mm-dd') as senddate from tblsendsmshistory  where to_char(senddate,'yyyy-mm-dd') between '"+datefrom+"' and '"+dateto+"'");这边的where后面怎么还要转化成to_char呢?用 date between  .. and ... 不是更好吗?始化sql语句是指什么东东?
      

  2.   

    因为考虑到 要求用户输入的格式是'yyyy-mm-dd'的 而且不知道现在这个oracle(8的)版本自动支持不支持格式的匹配....所以就....
     
    你引用的这段代码中 datefrom 和dateto就没初始化嘛~  而且 我不知道怎么样把上面的<input里面的值付给 datefrom 和dateto   很头痛啊  ......~_~
      

  3.   

    使用request.getParameter("...")取得传递过来的值.
    也就是datafrom = request.getParameter("datafrom");
    datato=request.getParameter("datato");在sql语句里面最好不要把日期转化成字符以后再进行比较,那样的话速度会慢很多.建议你把语句修改为:select distinct to_char(senddate,'yyyy-mm-dd') as senddate from tblsendsmshistory where senddate >= to_date('" + datefrom + "','yyyy-mm-dd') and senddate <= to_date('" + dateto + "','yyyy-mm-dd')
      

  4.   

    楼上已经讲了:)不过distinct开销很大的,最好不要用.