Artigo: 824106 - Última revisão: terça-feira, 23 de Setembro de 2003 - Revisão: 1.1

PROBLEMA: "ResultSet pode não Reler linha Data" ' Erro ao ler dados a partir de um objecto ResultSet do JDBC

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Reduzir tudo

Sintomas

Tem uma aplicação Java que utiliza JDBC para obter um objecto ResultSet utilizando o controlador do Microsoft SQL Server 2000 para JDBC. Quando tenta ler uma coluna numa ResultSet , poderá receber a seguinte mensagem de erro:
Java.SQL.SQLException: [Microsoft] [controlador de 2000 SQLServer para JDBC] ResultSet não pode releitura dados da linha para a coluna 1.
Nota Nesta mensagem de erro, as palavras "podem não" é uma palavra escrita incorrectamente para a palavra "não".

O número de colunas que a mensagem de erro fizer referência a está dependente o esquema do objecto de ResultSet .

Causa

Este erro ocorre com ResultSet objectos que contêm uma coluna BLOB (por exemplo, texto , ntext ou imagem tipos de dados). O controlador não é possível devolver uma coluna BLOB desordenadas porque-não coloca em cache todo o conteúdo dos tipos de dados do BLOB devido a limitações de tamanho.

Para qualquer linha ResultSet , pode ler qualquer coluna da esquerda para a direita e cada coluna deve ser lido apenas uma vez. Se tentar ler fora de ordem de colunas, ou se releitura uma coluna de ResultSet , poderá receber a mensagem de erro que descreve a secção "Sintomas".
Para evitar o problema, leia as colunas ResultSet na ordem.

Ponto Da Situação

Este comportamento ocorre por predefinição.

Mais Informação

Passos para reproduzir o comportamento


Criar a tabela de teste

  1. Inicie o Microsoft SQL Query Analyzer.
  2. Colar as consultas SQL seguintes no Editor de consultas:
    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. Saia do Microsoft SQL Query Analyzer.

Criar e testar a aplicação de Java

  1. Cole o seguinte código no bloco de notas ou um editor de ext t à 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. Substituir o servidor <userid> e <passwd> Este código com o nome do computador que está a executar o SQL Server, o id de utilizador e a palavra-passe.
  3. Guarde este código de Java como Class1.java .
  4. Compilar o ficheiro de origem Java que criou no passo 4 e, em seguida, execute a aplicação. Recebe a mensagem de erro efectuadas "Sintomas" secção descreve quando chamar o primeiro getString .

Referências

Para obter informações adicionais sobre o Microsoft JDBC, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
313100  (http://support.microsoft.com/kb/313100/ ) COMO: começar com o Microsoft JDBC

A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2000 Driver for JDBC
Palavras-chave: 
kbmt kberrmsg kbjdbc kbjava kbdatabase kbprb KB824106 KbMtpt
Tradução automáticaTradução automática
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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 824106  (http://support.microsoft.com/kb/824106/en-us/ )
Retired KB ArticleExclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.