文章編號: 824106 - 上次校閱: 2003年9月23日 - 版次: 1.1

重新 PRB: 「 結果集可以不讀取資料列資料"' JDBC 結果集物件中讀取資料時發生錯誤

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

徵狀

您有使用 JDBC 藉由使用 Microsoft SQL Server 2000 驅動程式的 JDBC 擷取一個 結果集 的物件為 Java 應用程式。當想讀取 結果集 的資料行可能會收到下列錯誤訊息:
java.sql.SQLException: [Microsoft] [SQLServer 2000 對於 JDBC 的驅動程式] 結果集不可以重新讀取資料行 1 的資料列資料。
附註此錯誤] 訊息中文字 」 可以不 」 是找到拼字錯誤的單字"不能"

錯誤訊息是指資料行數是 結果集 物件的結構描述而定。

發生的原因

與包含 BLOB 資料行 (比方說 textntextimage 資料型別) 的 結果集 物件,就會發生這個錯誤。驅動程式無法傳回 BLOB 資料行順序,因為它並不會快取的 BLOB 資料類型的所有內容因為的大小限制。

結果集 的任何資料列,您可以讀取任何資料行從左到右,每個資料行應該讀取僅一次]。如果您嘗試讀取資料行順序,或重新從 結果集 的讀取的資料行,可能會收到 < 徵狀 > 一節將說明錯誤訊息。
若要防止問題,閱讀 結果集 資料行順序。

狀況說明

這種行為是經過設計規劃的。

其他相關資訊

重製行為的步驟


建立測試資料表

  1. 啟動 Microsoft SQL 查詢分析。
  2. 貼上下列 SQL 查詢在查詢編輯器:
    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. 按一下 [查詢] 功能表 執行
  4. 請結束部份的 Microsoft SQL 查詢分析。

建立和測試 Java 應用程式

  1. 將下列程式碼貼入 [記事本] 或您選擇的 t 分機編輯器中:
    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. 取代在伺服器 <userid>和 <passwd>這段程式碼以執行 SQL Server,您的使用者] 識別碼和密碼的電腦名稱中。
  3. 將這個 Java 程式碼儲存為 Class1.java
  4. 編譯 Java 來源檔案,您在步驟 4 中所建立,然後再執行應用程式。您收到錯誤訊息所做之 < 徵狀 > 一節將說明當第一個 getString 呼叫。

?考

取得更多資訊有關 Microsoft JDBC 按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
313100? (http://support.microsoft.com/kb/313100/ ) 如何: 著手進行 Microsoft JDBC

這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Driver for JDBC
關鍵字:?
kbmt kberrmsg kbjdbc kbjava kbdatabase kbprb KB824106 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:824106? (http://support.microsoft.com/kb/824106/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
Retired KB Article依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。