|
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)
======================================================================
|
|
Comments
|
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
|