Java Solaris Communities Sun Store Join SDN My Profile Why Join?
 
Bug Database
Bug Detail
Quick Lists
Top 25 Bugs
Top 25 RFE's
Recently Closed Bugs
Printable Page Printable Page


Bug Database
Bug ID: 4529713
Votes 0
Synopsis updateString does not work with JDBC/ODBC bridge of JDK 1.4.0-beta3
Category jdbc:jdbc_odbc_bridge
Reported Against merlin-beta3
Release Fixed
State 11-Closed, duplicate of 4486195, bug
Priority: 3-Medium
Related Bugs 4486195
Submit Date 20-NOV-2001
Description




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: [ customer ][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: [ customer ][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: [ customer ][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: [ customer ][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: [ customer ][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) 
======================================================================
Work Around
N/A
Evaluation
This is not reproduceable on Oracle 8i using beta 3. Need to verify that it this either a problem specific to SQLServer or weather we have introduced a problem
recently.

  xxxxx@xxxxx   2001-11-20
================================================================================Fix integrated in b86.
 
  xxxxx@xxxxx   2001-11-21
===============================================================================
Comments
  
  Include a link with my name & email   

Submitted On 26-NOV-2001
TRietzel
This bug occurs with the Merlin 1.4 beta 3 and MS Access.
We do not use the MS SQL Server. For MS SQL Server and 
ORACLE we use JDBC type 4 JDBC drivers. We will use MS 
Access via ODBC driver and we need the JDBC-ODBC bridge for 
this. 
Please fix this bug in Merlin because it is currently not 
fixed in beta 3.

Regards,

Torsten Rietzel
i-net software


Submitted On 26-NOV-2001
TRietzel
If you cannot reproduce it with ORACLE then the 
communication of the JDBC-ODBC bridge does not use the MS 
Access ODBC driver correctly. We use the current ODBC 
driver version for MS Access (MDAC 2.6).
This bug need to be fixed in Merlin or the JDBC-ODBC bridge 
of Merlin is not usable for e.g. MS Access.



Submitted On 24-JAN-2005
Amir_Jafarian
I don



PLEASE NOTE: JDK6 is formerly known as Project Mustang