用MS SQL2000遇到这样的问题了,我所采用的ms sql的驱动是官方的.在网上查了一下,感觉说得零零散散,模模糊糊,有错有对.真是鱼龙混杂,感觉像进了市场买菜.......我尽我的掌握和有限的水平综合起来总结一下:
这个问题的原因是只要表里有Blob或者Clob两个当中的一种或者这两个字段都存在,并且采用MS SQL官方的驱动.就会产生这个错误!并且查看了很多资料,很多总结都指出这种错误仅MS SQL2000才会出现.
网上总结的微软驱动的缺点及解决方案: 数据库表:TChannle
(1)如果采用jdbc-odbc驱动,那么就必须按照查询顺序来一次读取(不论有没有image或text类型)
(2)如果采用微软提供的ms sql server jdbc driver,如果查询语句中,不存在image或text类型字段,那么可以按照无序获取
(3)
如果采用微软提供的ms sql server jdbc
driver,如果查询语句中,存在image或text类型字段,那么就必须按照顺序读取,否则就会报告Driver]ResultSet can
not re-read row data for column之类的错误
(4)如果想不查询语句中有没有image或text类型字段,都可以不按照顺序获取,或重复获取。
上面四点,什么算是无序获取和顺序获取?我迷糊半天,又查了半天,查到一个例子:
数据库表:TestTable
表字段及类型:
guid char(38)
title varchar(100)
content Text
username varchar(20)
查询sql语句:
select guid,username,content,title from TestTable where····
java代码:
rs.getString("guid");
rs.getBinaryStream("content");
rs.getString("username");
-----------------------------------------------------------
上面那段代码,很不荣幸是。使用微软的驱动,必然会报错(就是上面说的那个错误)。如果你跟踪的话,必然是这一行:rs.getString("username")抛出错误。
那么,如果你把rs.getString("username")和rs.getBinaryStream("content");位置互换以下,会怎么样呢。结果就是可以正常运行。
为什么会出现这种情况呢,因为微软的驱动,在包含了blob或clob类型(就是Image和Text类型)的字段。那么就必须按照select顺序查询,且不支持重复查询。
还有重复查询,又是什么意思?再举个例子:
表字段及类型:
chanleid主键 int自增
chanName频道名称 varchar
creatTime varchar
creatUserName varchar
所谓重复查询的语句:
select chanName, chanName, chanName from TChannle
可以查出三个频道名称,即chanName.这就是重复查询!
如何解决这个问题呢?
(1) 使用Sql Server 2000的第三方驱动就没有这样的问题存在。网上说找到jTDS取代微软的SQLServer2000的JDBC驱动.
要使用jTDS驱动,配置要做一些变动:
数据库URL:jdbc:jtds:sqlserver://localhost:1433;DatabaseName=XXX
驱动类:net.sourceforge.jtds.jdbc.Driver
jtds驱动的下载地址:http://sourceforge.net/projects/jtds/
(2)hibernate映射文件里面不映射CLOB或者BLOB字段,当遇到CLOB或者BLOB字段时,直接映射成String类型的,MS SQL数据库会自动转成text类型的.
分享到:
相关推荐
在使用Java连接SQL Server 2000数据库时,可能会遇到`java.sql.SQLException: [Microsoft][SQL Server 2000 Driver for JDBC] ResultSet cannot re-read row data for column X`这样的异常。这个问题通常是由于SQL ...
### ResultSet对象获取数据的各种方法 在Java编程语言中,`ResultSet`对象是处理数据库查询结果的核心组件之一。它充当一个可滚动的、可更新的数据表,用于存储从数据库执行SQL语句后返回的结果集。本文将详细介绍...
例如,`resultSet.getInt(1)`或`resultSet.getString("columnName")`。 4. 遍历结果集:为了完整遍历ResultSet,你需要在while循环中使用next()方法,直到它返回false为止。示例代码如下: ``` while (resultSet....
2. **SQL查询**:执行`Statement`或`PreparedStatement`对象的`executeQuery()`方法来执行SQL查询,这会返回一个`ResultSet`对象。 3. **处理ResultSet**:`ResultSet`是一个游标,可以按照顺序读取查询结果。我们...
### Java ResultSet 常用方法详解 #### 一、ResultSet 类型概述 在Java的JDBC编程中,`ResultSet`接口用于表示从数据库查询中获取的结果集。它提供了多种方式来处理这些数据,并且根据不同的应用场景,支持不同类型...
ResultSetMetaData是另一个关键接口,它提供了关于ResultSet中列的元数据信息。例如,你可以通过ResultSetMetaData来获取列的数量、列的名称、列的类型、列的宽度、是否可以用于WHERE子句等等。这些信息对于正确地...
ResultSet是Java数据库连接(JDBC)中用于处理查询结果的核心接口。它代表了从数据库查询返回的数据集,允许程序员逐行地访问和操作这些数据。本文将深入探讨ResultSet的两个关键特性:更新当前行的列值和使用插入行...
在遇到使用微软官方驱动时出现的问题,如“ResultSet cannot re-read row data for column”这类错误时,可以选择切换到JTDS驱动来解决。 首先,你需要从源码仓库下载JTDS驱动的最新版本,例如jtds-1.2.2.jar。由于...
Java ResultSet常用方法 Java ResultSet是Java数据库连接(JDBC)中最重要的组件之一,用于存储和处理数据库查询结果。在Java中,ResultSet对象是通过Statement对象的executeQuery()方法或prepareStatement()方法...
Java 数据库连接 ResultSet Java 数据库连接中的 ResultSet 是一个非常重要的概念,它包含符合 SQL 语句中条件的所有行,并且提供了对这些行中数据的访问。ResultSet 通过一套 get 方法访问当前行中的不同列,例如 ...
标题中的“oracle-export-data-into-excel-file.rar_DEMO_excel oracle”表明这是一个关于将Oracle数据库中的数据导出到Excel文件的示例项目。这个DEMO适用于那些希望通过编程方式实现这一功能的初学者。标签“demo ...
9. 类型错误:`Data truncated for column 'gatheringMoney' at row 1`表明尝试将不符合列定义的数据类型的数据插入列中。 10. 数据库连接池问题:`Name java: is not bound in this Context`可能是因为JNDI查找...
Spring Data JDBC与JDBC是两种不同的数据库访问方式,它们在Java开发中有着广泛的应用。JDBC(Java Database Connectivity)是Java平台的标准API,用于与各种数据库进行交互。它提供了低级别的数据库操作,如建立...
ResultSet 转为 List ResultSet 转为 List<Map> 是一种常见的数据处理操作。在 Java 中,使用 JDBC 连接数据库时,通常会返回一个 ResultSet 对象,该对象包含了查询结果集的所有记录。为了方便数据处理和使用,...
标题中的“poi根据ResultSet到处Excle源码”指的是使用Java的Apache POI库将数据库查询结果(ResultSet)转换为Excel文件的过程。Apache POI是一个流行的API,它允许开发者读写Microsoft Office格式的文件,包括...
在Java编程中,数据处理是核心任务之一,而ResultSet、JSON和List是处理数据时常见的三种数据结构。ResultSet是数据库查询结果的载体,JSON是一种轻量级的数据交换格式,而List是Java集合框架中的动态数组。本文将...
本篇笔记将深入探讨2010年6月23日记录的一些关于ResultSet的常用操作,结合实例进行讲解。 1. 创建与初始化 在Java中,我们通常通过Statement或PreparedStatement对象的executeQuery()方法执行SQL查询来获取...
- `rs.updateXXX(int column, XXX data)` 和 `rs.updateXXX(String columnName, String data)`:更新当前行指定列的值,其中XXX代表不同的数据类型,如int、double、String、Date等。 - `rs.updateRow()`:更新...
6. 错误处理:在转换过程中,XMLWriter可能会捕获并处理可能的异常,例如文件I/O错误或数据转换错误。 开源软件的优势在于,开发者可以自由地查看、使用、修改和分发源代码。对于"ResultSet to XML Converter",这...
以上错误列表总结了 Oracle 数据库中可能出现的一些常见错误及其可能的原因。针对每个错误码,了解其含义可以帮助开发者和数据库管理员快速定位问题所在,并采取适当的措施来解决这些问题。在实际应用中,还应该结合...