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

updateString does not work with JDBC/ODBC bridge of JDK 1.4.0-beta3

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P3 P3
    • None
    • 1.4.0
    • core-libs



      Name: rmT116609 Date: 11/20/2001


      java version "1.4.0-beta3"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-beta3-b84)
      Java HotSpot(TM) Client VM (build 1.4.0-beta3-b84, mixed mode)

      1. Create the following table on SQL Server:

      CREATE TABLE insertTable (
      varcharColumn varchar (500) NULL ,
      id int NOT NULL
      )
      GO

      ALTER TABLE insertTable WITH NOCHECK ADD
      CONSTRAINT PK_insertTable PRIMARY KEY NONCLUSTERED
      (
      id
      )
      GO

      2. Execute the following testprogram:

      import java.sql.*;
      import java.util.*;

      public class TestUpdateString {

          public static void main(String argv[]){
           Connection con = null;
           Statement st = null;
           ResultSet rs = null;
              try {
                  DriverManager.setLogStream(System.out);
                  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
                  con=DriverManager.getConnection("jdbc:odbc:treiber","sa","");
                  st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
      rs = st.executeQuery("SELECT * FROM insertTable");
                  rs.moveToInsertRow();
                  rs.updateString(1, "S1");
                  rs.updateInt(2,1);
                  rs.insertRow();
              }catch(Exception e) {
                  e.printStackTrace();
              }finally{
                  try{ rs.close();
                  }catch(Throwable e){}
                  try{ st.close();
                  }catch(Throwable e){}
                  try{ con.close();
                  }catch(Throwable e){}
              }
          }
      }

      3. I get this exception:

      ERROR - Generating SQLException...
      SQLException: SQLState(22001) vendor code(0)
      java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]String data, right truncation
              at sun.jdbc.odbc.JdbcOdbcResultSet.setPos(JdbcOdbcResultSet.java:5068)
              at sun.jdbc.odbc.JdbcOdbcResultSet.insertRow(JdbcOdbcResultSet.java:4018
      )
              at TestUpdateString.main(TestUpdateString.java:26)
      java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]String data, right truncation
              at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6109)
              at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:6266)
              at sun.jdbc.odbc.JdbcOdbc.SQLSetPos(JdbcOdbc.java:4729)
              at sun.jdbc.odbc.JdbcOdbcResultSet.setPos(JdbcOdbcResultSet.java:5019)
              at sun.jdbc.odbc.JdbcOdbcResultSet.insertRow(JdbcOdbcResultSet.java:4018
      )
              at TestUpdateString.main(TestUpdateString.java:26)
      java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]String data, right truncation
              at sun.jdbc.odbc.JdbcOdbcResultSet.setPos(JdbcOdbcResultSet.java:5068)
              at sun.jdbc.odbc.JdbcOdbcResultSet.insertRow(JdbcOdbcResultSet.java:4018
      )
              at TestUpdateString.main(TestUpdateString.java:26)


      There are not the correct string data saved in the row therefore the data would
      be truncated.

      4. If i add a getString call then i get the following exception:

      ERROR - Generating SQLException...
      SQLException: SQLState(24000) vendor code(0)
      java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid cursor state
              at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6109)
              at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:6266)
              at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3310)
              at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:
      5494)
              at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:342)

              at TestUpdateString.main(TestUpdateString.java:25)
      java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid cursor state
              at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6109)
              at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:6266)
              at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3310)
              at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:
      5494)
              at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:342)

              at TestUpdateString.main(TestUpdateString.java:25)



      We have reported such bugs in earlier versions like 1.4.0-beta2, 1.4.0-beta and
      JDK 1.3.x also. Currently it is not possible save string data with the JDBC-
      ODBC bridge of the JDK 1.4.0.

      Please response asap because we are implementing a Java application that based
      on JDBC 2.0 and we are not possible to use it with a ODBC database. But this is
      needed for our application because our customers use these databases.


      (Review ID: 134912)
      ======================================================================

            ahandasunw Amit Handa (Inactive)
            rmandalasunw Ranjith Mandala (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: