PROBLEMA: "ResultSet pode não reler dados de linha" ' Erro ao ler dados de um objeto de ResultSet JDBC

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 824106
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.
Sintomas
Você tiver um aplicativo Java que usa JDBC para recuperar um objeto ResultSet usando o driver do Microsoft SQL Server 2000 para JDBC. Quando você tenta ler uma coluna em ResultSet , você receberá a seguinte mensagem de erro:
Java.SQL.SQLException: ResultSet [Microsoft] [SQLServer driver do 2000 para JDBC] não pode nova leitura de dados da linha da coluna 1.
Observação Nessa mensagem de erro, as palavras "podem não" são um erro de ortografia para a palavra "não".

O número da coluna que a mensagem de erro se refere a depende o esquema de seu objeto ResultSet .
Causa
Este erro ocorre com objetos ResultSet que contêm uma coluna BLOB (por exemplo, texto , ntexto ou imagem tipos de dados). O driver não é possível retornar uma coluna BLOB fora de ordem porque ele não armazena em cache todo o conteúdo dos tipos de dados BLOB devido a limitações de tamanho.

Para qualquer linha em ResultSet , você pode ler qualquer coluna da esquerda para direita e cada coluna deve ser lido somente uma vez. Se você tentar ler fora de ordem de colunas, ou se você nova leitura uma coluna de ResultSet , você receberá a mensagem de erro descrita na seção "Sintomas".
Para evitar que o problema, leia as colunas ResultSet na ordem.
Situação
Esse comportamento é por design.
Mais Informações

Passos para reproduzir o problema


Criar a tabela de teste

  1. Inicie o Microsoft SQL Query Analyzer.
  2. Cole as seguintes consultas SQL no Editor de consulta:
    use pubs;create table myTable (fld1 int, fld2 varchar(20), remark text);insert into myTable values (1, 'Joseph', 'Text for Joseph');insert into myTable values (2, 'Michael', 'Text for Michael');insert into myTable values (3, 'Thomas', 'Text for Thomas');
  3. No menu consulta , clique em Executar .
  4. Feche o Microsoft SQL Query Analyzer.

Criar e testar o aplicativo Java

  1. Cole o seguinte código no bloco de notas, ou em um editor de ext t de sua escolha:
    import java.sql.*;import java.io.*;public class Class1{	public static void main (String[] args)	{		try		{			Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver" );			Connection connection = DriverManager.getConnection("jdbc:microsoft:sqlserver://server:1433;databasename=pubs;SelectMethod=direct", "<UserId>","<PassWd>");			Statement stmt = connection.createStatement();			String s = "SELECT fld1, fld2, remark FROM myTable";			ResultSet rs = null;			rs = stmt.executeQuery(s);			System.out.println("Success! The following are the rows in this query:");			int fld1;			String fld2;			String remark;			while (rs.next())			{				remark = rs.getString("remark"); //fails if in this order				fld1 = rs.getInt("fld1");				fld2 = rs.getString("fld2");				//remark = rs.getString("remark"); //works fine if in this order				System.out.println(fld1 + ", " + fld2 + ", " + remark);			}			rs.close();			stmt.close();			connection.close();		}		catch(Exception e)		{			System.out.println(" Exception = " + e );		}		try		{			System.out.println("Press any key to quit...");			System.in.read();		}		catch (Exception e)		{		}	}}
  2. Substitua o servidor, <userid> e <passwd> nesse código com o nome do computador que está executando o SQL Server, sua identificação de usuário e sua senha.
  3. Salve esse código Java como Class1.java .
  4. Compile o arquivo de origem Java que você criou na etapa 4 e, em seguida, executar o aplicativo. Você receber a mensagem de erro "Sintomas" seção descreve quando o primeiro getString chamada são feitas.
Referências
Para obter informações adicionais sobre Microsoft JDBC, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
313100COMO: começar com Microsoft JDBC

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 824106 - Última Revisão: 09/23/2003 18:58:36 - Revisão: 1.1

Microsoft SQL Server 2000 Driver for JDBC

  • kbmt kberrmsg kbjdbc kbjava kbdatabase kbprb KB824106 KbMtpt
Comentários