使用sql的text类型的问题。
我用sqlserver做数据库,tomcat连接池。
我的sqlserver有如下字段:
test1 varchar(255)
test2 text
test3 text
test4 text
test5 text
调用显示的时候报错。把所有text类型全部改成varchar就完全没问题。
程序是肯定没错的,因为改了数据类型就没错,况且程序就那么几句,很简单。
大家有没遇到这个问题?
请教答案。
问题点数:20、回复次数:34Top
1 楼xmayxmei(八月狐)回复于 2005-06-02 09:09:26 得分 1
text在数据库里存储和VARCHAR不一样,
他存储的不只值,而是指针,
JSP得到的NULL会出现异常,
所以,TEXT为空值时,就会出错。Top
2 楼woolceo(努力升仙)回复于 2005-06-02 11:50:30 得分 0
感谢楼上答复。
请允许我再问一下,一般做论坛或新闻,保存内容的字段应该用什么类型呢?
我以前用access的时候有种类型叫“备注”的。Top
3 楼sleet96(菜菜)回复于 2005-06-02 13:46:34 得分 0
markTop
4 楼woolceo(努力升仙)回复于 2005-06-02 16:49:05 得分 0
请说清楚好么?sqlserver里面没有一种叫mark的类型啊。Top
5 楼geelpheels(geelpheels)回复于 2005-06-03 17:21:02 得分 0
长的用text短的用varcharTop
6 楼qingzhuang(半片云)回复于 2005-06-03 17:30:35 得分 0
长短问题Top
7 楼woolceo(努力升仙)回复于 2005-06-03 19:10:47 得分 0
但我用text的话会报错啊。什么问题?Top
8 楼feng198424(无花无酒锄作田)回复于 2005-06-03 23:10:37 得分 0
插入数据的话,如果为空的话,给它插入一个""值
权宜之计Top
9 楼feng198424(无花无酒锄作田)回复于 2005-06-03 23:11:22 得分 0
或者读取text值的时候做个判断Top
10 楼woolceo(努力升仙)回复于 2005-06-04 14:09:35 得分 0
这样子啊。。。我去试下。。。谢谢。Top
11 楼woolceo(努力升仙)回复于 2005-06-04 14:15:05 得分 0
还是不行啊。Top
12 楼woolceo(努力升仙)回复于 2005-06-04 14:15:54 得分 0
ps一下,我用rs.getString()读取没问题吧?Top
13 楼Three_H(游戏就是我的生命)回复于 2005-06-04 15:00:06 得分 0
JSP读SQLSERVER的TEXT字段会有问题,如果TEXT字段为""和NULL就会报错!
解决办法:
你插入数据之前进行判断,如果为""或NULL就插入" ",就是插入空格字符!Top
14 楼woolceo(努力升仙)回复于 2005-06-05 12:12:49 得分 0
我数据库全部字段都有值了啊。
但读取就还是出错,为什么啊?
请教。谢谢。Top
15 楼woolceo(努力升仙)回复于 2005-06-05 23:38:17 得分 0
顶!Top
16 楼oldmoon(电子商务人,电子商务路)回复于 2005-06-06 08:04:20 得分 0
最好是把源代码贴出来看一下!Top
17 楼woolceo(努力升仙)回复于 2005-06-07 01:01:29 得分 0
楼上,跟代码没关的。Top
18 楼xindear(逆行)回复于 2005-06-07 01:31:52 得分 0
不要意思
Text类型内容是多行的,如果用rs.getString()的到的字符串里是不是有回车或换行符的啊Top
19 楼woolceo(努力升仙)回复于 2005-06-08 11:54:16 得分 0
楼上,我测试的数据都是很简单的“aaa”“333”这些,但都报错。
继续请教。Top
20 楼linhao315(浩哥)回复于 2005-06-08 12:11:43 得分 0
markTop
21 楼woolceo(努力升仙)回复于 2005-06-10 12:03:29 得分 0
楼上,mark是什么意思?Top
22 楼woolceo(努力升仙)回复于 2005-06-11 01:03:24 得分 0
继续顶。Top
23 楼yun15291li(秋飞意)回复于 2005-06-11 03:59:10 得分 1
请说清楚好么?sqlserver里面没有一种叫mark的类型啊。这句话是我见过最搞笑的,自己用金山词霸查一下就知道了。不会真的到sqlserver里找mark类型了吧。
其实不要那么绝对相信代码没问题的。如果都有值了,就用getString 是可以把txt内容得到的。只是如果还想换行需要处理一下(以前有过类似的帖子)http://search.csdn.net/Expert/topic/1564/1564974.xml?temp=.9825403可以看看如何读出来换行的代码。Top
24 楼xyj0323(好好学习,天天向上)回复于 2005-06-11 05:59:57 得分 0
帮你顶!Top
25 楼woolceo(努力升仙)回复于 2005-06-11 14:27:03 得分 0
to yun15291li(秋飞意)
===============================
谢谢你的回复。我现在text类型的字段里有值的啊。而且没有任何换行之类的符号的。只是简单的“aaa”之类的内容,为什么还会有错呢?Top
26 楼yun15291li(秋飞意)回复于 2005-06-11 15:58:47 得分 0
把错误提示帖出来,对应相关代码以及数据库部分。应该不是什么难点,只是哪里疏忽了吧。Top
27 楼woolceo(努力升仙)回复于 2005-06-11 22:55:21 得分 0
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]ResultSet can not re-read row data for column 5.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.validateColumnIndex(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.getString(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.getString(Unknown Source)
at org.apache.commons.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:224)
at com.heatpixel.news.bean.NewsDAO.listAllNews(NewsDAO.java:340)
at com.heatpixel.news.tag.NewsList.doStartTag(NewsList.java:56)
at org.apache.jsp.admin.index_jsp._jspService(index_jsp.java:76)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at com.heatpixel.global.servlet.SetCharacterEncoding.doFilter(SetCharacterEncoding.java:33)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at com.heatpixel.global.servlet.FiltrateHeader.doFilter(FiltrateHeader.java:54)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
Top
28 楼woolceo(努力升仙)回复于 2005-06-11 23:01:41 得分 0
数据库结构如图:
http://www.ood.com.cn/wool/photo/2005611233270.jpg
再次感谢大家。Top
29 楼NetRep_Loser(领悟非凡)回复于 2005-06-12 11:46:36 得分 8
不是text字段的空不空值的问题
而可能是你读完一个字段值之后又回来读
sqlserver是不允许这样读取字段值的
而且在查询结果中读取字段,是按顺序的,不能乱来
一般都用text字段,大文本嘛
如果考虑到可移植性(应用不同数据库),就不能用text
另外有的系统项目是讲大文本保存到文本文件中
然后数据表格中增加一字段,用来保存该文本文件名称
Top
30 楼woolceo(努力升仙)回复于 2005-06-12 12:45:26 得分 0
楼上,我的程序只是一个简单的while循环,只读了一次的啊。百思不得其解。
这个问题困扰我好久了啊。
希望大家帮忙!谢!Top
31 楼wangkunhong(乔.Jo)回复于 2005-06-12 13:53:50 得分 10
如果你读出到页面的时候,内容里面有text字段,那么你在读取的时候一定要按字段的顺序来读。。Top
32 楼woolceo(努力升仙)回复于 2005-06-12 15:31:36 得分 0
楼上什么意思?小弟对数据库不熟悉,请详细点说明好么?感谢。Top
33 楼yun15291li(秋飞意)回复于 2005-06-12 17:54:09 得分 0
查询的sql语句错误。
...
你写成select * from tablename where id = 1;
....
while(rs.next()){
...
...rs.getString(1);
...rs.getString(2);
....
....
}Top
34 楼woolceo(努力升仙)回复于 2005-06-13 01:33:45 得分 0
问题已解决,是顺序问题。感谢大家。Top




