第一个问题:我在做留言板程序时,因为留言数据可能较大需要将保存留言内容的字段gst_content设为TEXT类型允许为NULL,当留言为空时用rs.getString("gst_content")读取该字段会报如下错误:
Servlet.service() for servlet jsp threw exception
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Underlying input stream returned zero bytes
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseData.getString(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.getString(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.getString(Unknown Source)
at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:224)
at org.apache.jsp.index_jsp._jspService(org.apache.jsp.index_jsp:177)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
不为空时读取正常,请问该用什么方式读取为空字符串的TEXT字段才不会出错?第二个问题:我想保存留言的时间,就用了一个TIMESTAMP类型的字段gst_time,但用rs.getTimestamp()方法读时又产生了
类型不能转换的错误,请问SQLSERVER中有什么方式可以保存更改数据的时间,好像MYSQL可以。我应用什么方式保存这个时间?有实现代码更好。
这是我第一次求助,希望大家知道多少说多少,谢谢了!
加一百分,不够我再加哦!
Servlet.service() for servlet jsp threw exception
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Underlying input stream returned zero bytes
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseData.getString(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.getString(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.getString(Unknown Source)
at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:224)
at org.apache.jsp.index_jsp._jspService(org.apache.jsp.index_jsp:177)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
不为空时读取正常,请问该用什么方式读取为空字符串的TEXT字段才不会出错?第二个问题:我想保存留言的时间,就用了一个TIMESTAMP类型的字段gst_time,但用rs.getTimestamp()方法读时又产生了
类型不能转换的错误,请问SQLSERVER中有什么方式可以保存更改数据的时间,好像MYSQL可以。我应用什么方式保存这个时间?有实现代码更好。
这是我第一次求助,希望大家知道多少说多少,谢谢了!
加一百分,不够我再加哦!
Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/bookstore");
Connection conn=ds.getConnection();
//创建可滚动的结果集。
Statement stmt=conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs=stmt.executeQuery("select gst_user,gst_time,gst_ip,gst_title,gst_content from guestbook order by gst_time desc");
然后取出:
String time = rs.getString("gst_time");
out.println("留言时间:"+time);
out.println(" ");
out.println("用户IP:"+rs.getString("gst_ip")+"<br>");
out.println("主题:"+rs.getString("gst_title")+"<br>");
out.println("内容:"+rs.getString("gst_content"));
请问zdjava() :
最新的驱动是什么版本,在哪下?
String title=request.getParameter("title");
String content=request.getParameter("content");
Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/bookstore");
Connection conn=ds.getConnection();
PreparedStatement pstmt=conn.prepareStatement(
"insert into guestbook(gst_user,gst_title,gst_content,gst_ip) values(?,?,?,?)");
pstmt.setString(1,name);
pstmt.setString(2,title);
pstmt.setString(3,content);
pstmt.setString(4,fromIP);
pstmt.executeUpdate();
pstmt.close();
conn.close();
第一个问题通过下载SQLSERVER2005的驱动已经解决,可能是微软以前的驱动不支持TEXT类型。
第一个问题,TIMESTAMP类型用rs.getString()读出来的跟本不是时间,是一串长数字,不知为什么?
可能是不能用那个类型
应该用DATETIME SIMPLEDATETIME