在JSP中的一段代码: 
<% 
String starttime=request.getParameter("starttime"); 
String endtime=request.getParameter("endtime"); 
String machineid=request.getParameter("select"); SimpleDateFormat  smp  =  new  SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
Calendar  cdt1  =  Calendar.getInstance(); 
Calendar  cdt2  =  Calendar.getInstance(); 
cdt1.setTime(smp.parse(starttime));//starttime字符串时间转换为日期型 
cdt2.setTime(smp.parse(endtime));//endtime字符串时间转换为日期型 
//连接数据库 
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); 
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dx-exam"; 
String usr="sa"; 
String pwd="sa"; 
Connection conn=DriverManager.getConnection(url,usr,pwd); 
Statement stmt=conn.createStatement(); String sql="select * from data where MachineId="+machineid+ "and CurrentTime BETWEEN "+cdt1+"and"+cdt2; ..... %> 
为什么报这样的错误: 
javax.servlet.ServletException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]以 'time=1235002820000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset' 开头的 标识符 太长。最大长度为 128。 
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:846) 
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779) 
org.apache.jsp.login3_005fview_jsp._jspService(login3_005fview_jsp.java:224) 
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 

解决方案 »

  1.   

    使用java.sql.Time或java.sql.Timestamp类型
    如:DateFormat df = DateFormat.getDateTimeInstance();
    Data data1 = df.parse(starttime);
    Data data2 = df.parse(endtime);Time t1 = new Time(data1.getTime());
    Time t2 = new Time(data2.getTime())
      

  2.   

    sql语句问题 没有间隔
     比如 machineid ="aaa";
    cdt1 ="2009-02-20 8:00",cdt2="2009-02-20 12:00";
    像你这个
     String sql="select * from data where MachineId="+machineid+ "and CurrentTime BETWEEN "+cdt1+"and"+cdt2; 
    最后拼接的结果就是
    String sql="select * from data where MachineId=aaaand CurrentTime BETWEEN 2009-02-20 8:00and2009-02-20 12:00;
    红色and和两边的连一块了!注意语句字段和 连接符之间的间隔!
    OK?
    另外注意如果MachineId为字符串 建议
    MachineId='"+machineid+ "' 外加单引号!
    String sql="select * from data where MachineId="+machineid+ " and CurrentTime BETWEEN "+cdt1+" and "+cdt2; 
      

  3.   

    <%
        
      
      
    String starttime=request.getParameter("starttime");
    String endtime=request.getParameter("endtime");
    String machineid=request.getParameter("select");
    //String aa="and CurrentTime BETWEEN ";
    /*
    SimpleDateFormat   smp   =   new   SimpleDateFormat("yyyy-MM-dd hh:mm:ss");   
    Calendar   cdt1   =   Calendar.getInstance(); 
    Calendar   cdt2   =   Calendar.getInstance(); 
    cdt1.setTime(smp.parse(starttime));
    cdt2.setTime(smp.parse(endtime));
    */DateFormat df = DateFormat.getDateTimeInstance();
    Date data1 = df.parse(starttime);
    Date data2 = df.parse(endtime);Time t1 = new Time(data1.getTime());
    Time t2 = new Time(data2.getTime());//连接数据库
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
    String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dx-exam";
    String usr="sa";
    String pwd="sa";
    Connection conn=DriverManager.getConnection(url,usr,pwd);
    Statement stmt=conn.createStatement();String sql="select * from data where MachineId= " + machineid + "and CurrentTime BETWEEN "+ data1+"and"+data2;.......
    %>2楼的有点问题
    我输入起始时间与终止时间如下:
    2009-1-7 10:10:09
    2009-1-7 10:20:09运行报这样的错误:
    javax.servlet.ServletException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]第 1 行: 'Jan' 附近有语法错误。
      

  4.   

    String sql="select * from data where MachineId="+machineid+ "and CurrentTime BETWEEN "+cdt1+"and"+cdt2; 
    ========================================================================================================================
    String sql="select * from data where MachineId='"+machineid+ "'and CurrentTime BETWEEN "+cdt1+"空格"+and空格"+cdt2; 
      

  5.   

    查询语句中的日期和Calendar中的日期不是同一个类型吧
      

  6.   


    String sql="select * from data where MachineId = '"+machineid+ "' and CurrentTime BETWEEN "+cdt1+"  and  "+cdt2; 
      

  7.   

    是这样吗?String sql="select * from data where MachineId='"+machineid+ "'and CurrentTime BETWEEN "+data1+" "+and "+data2; 还是有错误
    E:\Tomcat 5.0\work\Catalina\localhost\test_Conformity11\org\apache\jsp\login3_005fview_jsp.java:139: 未结束的字符串字面值
    String sql="select * from data where MachineId='"+machineid+ "'and CurrentTime BETWEEN "+data1+" "+and "+data2; 
                                                                                                           ^
    1 错误
      

  8.   

    7楼
    还是报
    javax.servlet.ServletException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]以 'time=1231294209000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset' 开头的 标识符 太长。最大长度为 128。
      

  9.   


    SimpleDateFormat  smp  =  new  SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
    Date d1 = smp.format(starttime);
    Date d2 = smp.format(endtime);String sql="select * from data where MachineId='"+machineid+ "'" + 
    " and CurrentTime BETWEEN cast('" +smp.format(d1) + "' as DateTime) and cast('" +smp.format(d2) + "' as DateTime)"; 
      

  10.   

    用Statement向楼上那样用cast函数(针对sqlserver)
      

  11.   


    以下错误
    An error occurred at line: 57 in the jsp file: /login3_view.jsp
    Generated servlet error:
    E:\Tomcat 5.0\work\Catalina\localhost\test_Conformity11\org\apache\jsp\login3_005fview_jsp.java:135: 不兼容的类型
    找到: java.lang.String
    需要: java.util.Date
    Date d1 = smp.format(starttime);
                        ^
    An error occurred at line: 57 in the jsp file: /login3_view.jsp
    Generated servlet error:
    E:\Tomcat 5.0\work\Catalina\localhost\test_Conformity11\org\apache\jsp\login3_005fview_jsp.java:136: 不兼容的类型
    找到: java.lang.String
    需要: java.util.Date
    Date d2 = smp.format(endtime);
                        ^
    注意:E:\Tomcat 5.0\work\Catalina\localhost\test_Conformity11\org\apache\jsp\login3_005fview_jsp.java 使用或覆盖了已过时的 API。
    注意:要了解详细信息,请使用 -Xlint:deprecation 重新编译。
    2 错误
      

  12.   


    SimpleDateFormat  smp  =  new  SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
    Date d1 = smp.format(starttime); 
    Date d2 = smp.format(endtime); String sql="select * from data where MachineId='"+machineid+ "'" + 
    " and CurrentTime BETWEEN to_date('"+smp.format(d1)+"','YYYY-MM-DD HH:MI:SS') and to_date(
    '"+smp.format(d2)+"','YYYY-MM-DD HH:MI:SS')";
    关键是你的类型不匹配,在oracle中将字符串转为date的是to_date,不知道sql2000的是不是,你查查文档
      

  13.   


    SimpleDateFormat  smp  =  new  SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
    Date d1 = smp.format(starttime);
    Date d2 = smp.format(endtime);String sql="select * from data where MachineId='"+machineid+ "'" + 
    " and CurrentTime BETWEEN cast('" +smp.format(d1) + "' as timestamp) and cast('" +smp.format(d2) + "' as timestamp)";试试
      

  14.   

    String sql="select * from data where MachineId="+machineid+ "and CurrentTime BETWEEN "+cdt1+"and"+cdt2; 
    ======================================================================================================================== 
    String sql="select * from data where MachineId='"+machineid+ "'and CurrentTime BETWEEN "+cdt1+"空格"+and空格"+cdt2;