2009-4-9 20:26:49 已被阅读:1016 发表评论
在用JSP+sqlserver开发网站中遇到“ResultSet can not re-read row data for column 1”问题,在网上搜索得知,原来是微软公司的驱动的兼容性不太好。
有热心人总结了微软驱动的缺点:
(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类型字段,都可以不按照顺序获取,或重复获取。那么就必须更换驱动,改用第三方的。
解决方法:
下载JDTS驱动(支持SQL6.5,7.0,2000,2005,SYBASE) 下载地址:http://jtds.sourceforge.net/
下载解压后找到jtds-1.2.2.jar,放到 JSP项目 WEB-INF/lib目录下
数据库连接文件DbConn.java
package com.database;
import java.sql.*;
public class DbConn {
//private static String driverName ="com.microsoft.jdbc.sqlserver.SQLServerDriver";
//private static String dbURL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=jsp";
//原来的连接,jsp是数据库文件 http://www.dwww.cn
private static String driverName ="net.sourceforge.jtds.jdbc.Driver";
private static String dbURL="jdbc:jtds:sqlserver://localhost:1433/jsp";
private String userName="dwww";
private String userPwd="dwww";
public Connection dbConn=null;
public synchronized Connection getConnection()
{
try
{
Class.forName(driverName).newInstance();
dbConn=DriverManager.getConnection(dbURL, userName, userPwd);
if(dbConn!=null)
return dbConn;
}
catch(Exception e)
{
e.printStackTrace();
return null;
}
return null;
}
}
Ok,问题解决。
分享到:
相关推荐
面对`ResultSet cannot re-read row data for column X`这类问题时,可以通过调整读取顺序或更换JDBC驱动来解决。这两种方法都能有效避免该错误的发生,从而确保应用程序的稳定性和可靠性。对于长期维护的项目而言,...
在遇到使用微软官方驱动时出现的问题,如“ResultSet cannot re-read row data for column”这类错误时,可以选择切换到JTDS驱动来解决。 首先,你需要从源码仓库下载JTDS驱动的最新版本,例如jtds-1.2.2.jar。由于...
* @return a <code>ResultSet</code> object that contains the data produced * by the given query; never <code>null */ public ResultSet executeQuery(String sql) { try { Statement statement = ...
Object[][] data = {{"Row1", "Col2"}, {"Row2", "Col2"}}; String[] columnNames = {"Column1", "Column2"}; DefaultTableModel model = new DefaultTableModel(data, columnNames); table = new JTable(model...
for (String datakey : dbfield.keySet()) {// 循环该map的key集合 for (ExcelMap e : dbfield.get(datakey)) { if (map.containsKey(e.getName())) { if (e.isCompare() && !iscompare.containsKey(e....
为了解决这个问题,可以使用`ROW_NUMBER()`函数配合`PARTITION BY`和`ORDER BY`子句,这是Oracle 12c引入的`FETCH NEXT ... ROWS ONLY`语法,使得分页更加灵活和高效: ```sql SELECT * FROM ( SELECT a.*, ROW_...
在实际项目中,为了提高代码的可维护性和避免SQL注入,通常会推荐使用DAO(Data Access Object)模式和存储过程,或者更高级的ORM框架,如Hibernate或MyBatis。然而,对于学习和简单的应用,上述JDBC基础已经足够。 ...
Fetching a Single Column from a Result Set 10.2.3.5. Fetching a Row as an Object 10.3. Zend_Db_Profiler 10.3.1. Introduction 10.3.2. Using the Profiler 10.3.3. Advanced Profiler Usage 10.3.3.1....