在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)
解决方案 »
- 防止SQL注入的手段都有哪些
- 还是线程执行时间问题
- 不好意思,这是第三次发贴了,刚才可能大家没有明白我的意思,比如说今天是2006年12月16日,我的生日是1982年12月23日,那么结果就应该是
- 一个实现了Runnable接口的类中还有其它方法的执行问题,请教
- 问一个基本的AWT消息传递机制的问题
- 关于2个JFrame的参数传递~~~~~~~~~~~~
- 一个《车迷世界》软件
- 谁有JBuilder6 Enterprise 注册码?
- 调查:请问大家都用java做什么项目,能否具体点。
- 我下载了bea的mssql的jdbc驱动程序,请问如何安装?
- ByteBuffer的一个问题
- java 中如果用可增加数组实现 ArrayList
把Asia/Shanghai 改一下看看咯!!!
String starttime=request.getParameter("starttime");
String endtime=request.getParameter("endtime");
String machineid=request.getParameter("select"); 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; .......
%> 7楼的方法有点问题
我输入起始时间与终止时间如下:
2009-1-7 10:10:09
2009-1-7 10:20:09
运行报这样的错误:
javax.servlet.ServletException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]第 1 行: 'Jan' 附近有语法错误。
2009-1-7 10:10:09
2009-1-7 10:20:09
.
.
.
.
.
这样,你用smp.parse(Date),如果输入的时间就是今天(2009/02/20 time)
那么你得到的将是“2009-02-20 time”
而你库里的如果是像你说的那种形式“2009-1-7 time”
那么你对这两字符串比较是不会得到你想要的结果的~~~~对于你说的错误,你可以把你执行的SQL语句打出来,然后把它粘到数据库中执行一下这条语句
这样会更方便定位错误所在~~
你必须把你的时间转换成字符串才OK
你时间输出是:内似:Fri Feb 20 17:04:39 CST 2009
所以你要转换一下 比如说:cdt1.getTime().toLocaleString();
或者你自己用工具类转换一下才行
你可以去看看SQL的API你最后的字符串要是这样子的
select * from data where MachineId='编号' and CurrentTime BETWEEN '2009-2-20' and '2009-2-21'
或
select * from data where MachineId='编号' and CurrentTime BETWEEN '2009-2-20 15:00:00' and '2009-2-21 5:30:00'
还有 看你的编号好像不是INT类型的 如果有越界之类的错误的话 你可以试着先把你的编号类型改成INT 然后再看看你的结果是不是对应
这样的话 基本上能解决问题
你必须把你的时间转换成字符串才OK
你时间输出是:内似:Fri Feb 20 17:04:39 CST 2009
所以你要转换一下 比如说:cdt1.getTime().toLocaleString();
或者你自己用工具类转换一下才行
你可以去看看SQL的API你最后的字符串要是这样子的
select * from data where MachineId='编号' and CurrentTime BETWEEN '2009-2-20' and '2009-2-21'
或
select * from data where MachineId='编号' and CurrentTime BETWEEN '2009-2-20 15:00:00' and '2009-2-21 5:30:00'
还有 看你的编号好像不是INT类型的 如果有越界之类的错误的话 你可以试着先把你的编号类型改成INT 然后再看看你的结果是不是对应
这样的话 基本上能解决问题
setTimestamp(int parameterIndex, Timestamp x)