Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4902818

jdbc-odbc : problem with random column access within a ResultSet

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Won't Fix
    • Icon: P4 P4
    • None
    • 1.4.2
    • core-libs



      Name: rmT116609 Date: 08/07/2003


      FULL PRODUCT VERSION :
      java version "1.4.2"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-b28)
      Java HotSpot(TM) Client VM (build 1.4.2-b28, mixed mode)

      FULL OS VERSION :
      Windows NT Version 4.0

      EXTRA RELEVANT SYSTEM CONFIGURATION :
      SQLServer 7 database

      A DESCRIPTION OF THE PROBLEM :
      We use the driver "sun.jdbc.odbc.JdbcOdbcDriver" to connect to MS-SQLServer 7 database.
      We configure our result set to be insensitive like :
           Statement stmt = connexion.createStatement(
      ResultSet.TYPE_SCROLL_INSENSITIVE ,
      ResultSet.CONCUR_READ_ONLY );

      When we access randomly the columns using the untyped accesors like :
      System.out.println(rs.getObject(2));
      System.out.println(rs.getObject(1));
      System.out.println(rs.getObject(3));

      everything works well.

      However, if we use typed accessors like :
      System.out.println(rs.getString(2));
      System.out.println(rs.getString(1));
      System.out.println(rs.getString(3));

      The following exception occurs :

      java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]Invalid Descriptor Index
      at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6879)
      at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7036)
      at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3862)
      at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5561)
      at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:338)
      at div.TestResultSetInsensitive.main(TestResultSetInsensitive.java:53)




      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]Invalid Descriptor Index
      at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6879)
      at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7036)
      at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3862)
      at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5561)
      at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:338)
      at div.TestResultSetInsensitive.main(TestResultSetInsensitive.java:53)


      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import java.sql.*;

      public class TestResultSetInsensitive
      {

      public static void main(String[] args)
      {
      System.out.println(System.getProperties().getProperty("java.version"));
      String dsn = "jdbc:odbc:sw45v2" ;
      String user="user";
      String pwd="password";
      Connection connexion = null ;
      try
      {
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
      connexion = DriverManager.getConnection(dsn,user,pwd);
      Statement stmt = connexion.createStatement(
      ResultSet.TYPE_SCROLL_INSENSITIVE ,
      ResultSet.CONCUR_READ_ONLY );
      ResultSet rs = stmt.executeQuery("SELECT top 1 * from Tcredittype ");
      int colNo=rs.getMetaData().getColumnCount();
      rs.next();
      if(rs!=null)
      {
      //**access with Object :
      // -> it works with random access to columns
      // System.out.println(rs.getObject(2));
      // System.out.println(rs.getObject(1));
      // System.out.println(rs.getObject(3));

      //**access with datatype
      // -> it does't work with random access to columns
      // -> throws the folowing exception :
      /*
      java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]Invalid Descriptor Index
      at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6879)
      at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7036)
      at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3862)
      at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5561)
      at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:338)
      at div.TestResultSetInsensitive.main(TestResultSetInsensitive.java:45)
      */
      System.out.println(rs.getString(2));
      System.out.println(rs.getString(1));
      System.out.println(rs.getString(3));
      }
      rs.close();
      stmt.close();
      connexion.close();
      }
      catch( ClassNotFoundException e )
      {
      e.printStackTrace();
      }
      catch( SQLException pbSQL )
      {
      pbSQL.printStackTrace();
      }
      finally
      {
      try
      {
      if( connexion != null ) connexion.close() ;
      } catch( SQLException pb ){}
      }
      }

      }

      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      using untyped accessors : resultset.getObject(arg)
      (Incident Review ID: 192620)
      ======================================================================

            jbrucesunw Jonathan Bruce (Inactive)
            rmandalasunw Ranjith Mandala (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: