-
Bug
-
Resolution: Duplicate
-
P3
-
None
-
1.4.0
-
x86
-
windows_nt
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)
======================================================================
- duplicates
-
JDK-4486195 ResultSet.updateString() sets bytes of String incorrectly in the database.
-
- Resolved
-