在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)
<%
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)
如: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())
比如 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;
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' 附近有语法错误。
========================================================================================================================
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;
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 错误
还是报
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。
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)";
以下错误
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 错误
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的是不是,你查查文档
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)";试试
========================================================================================================================
String sql="select * from data where MachineId='"+machineid+ "'and CurrentTime BETWEEN "+cdt1+"空格"+and空格"+cdt2;