Hi everyone,
I've recently come across a problem where I get an unknown SQLException in my Java application when trying to retrieve a String from my DB2 database which contains some French accent characters. But, if I run the same SQL statement (without '?' parameters of course), I get the correct description displayed.
Please see below for relevent technical information.
Any ideas on what the problem is and how to fix it would be greatly appreciated.
Regards,
Tiger
Server OS: SUSE Linux, Enterprise Server 9
DB2 version: v8.1.2.96
Fixpack: 10
DB2 Type: WSE
Java version: jdk1.5.0_05
Relevent Java Code
Code:
CallableStatement cStmt = null;
ResultSet rs = null;
try {
Connection con = getConnection();
String sql = "SELECT description FROM errormessage WHERE errorCode = ? and languageCode = ?";
cStmt = con.prepareCall(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY );
cStmt.setString(1, "E123");
cStmt.setString(2, "FRA");
rs = cStmt.executeQuery();
if (rs.next()) {
String description = rs.getString(1);
System.out.println("Translated errormessage = " + description);
}
} catch (SQLException e) {
System.out.println("Exception caught. Exception Msg: " + e.getMessage());
System.out.println("SQL ErrorCode = " + e.getErrorCode() + ", SQL State = " + e.getSQLState())
e.printStackTrace();
} finally {
close(rs);
close(cStmt);
closeConnection();
}
}
SQLException and Stacktrace
Code:
Exception caught. Exception Msg: null
SQL ErrorCode = -99999, SQL State = null
com.ibm.db2.jcc.b.SqlException
at com.ibm.db2.jcc.b.r.a(r.java:1564)
at com.ibm.db2.jcc.b.r.m(r.java:483)
at com.ibm.db2.jcc.b.r.M(r.java:1198)
at com.ibm.db2.jcc.b.rc.getString(rc.java:887)
at DatabaseTest.test(DatabaseTest.java:140)
at DatabaseTest.main(DatabaseTest.java:47)
DB2 Table: ErrorMessage
Code:
Column Type Type
name schema name Length Scale Nulls
------------------------------ --------- ------------------ -------- ----- ------
ERRORMESSAGEID SYSIBM INTEGER 4 0 No
ERRORCODE SYSIBM CHARACTER 6 0 No
LANGUAGECODE SYSIBM CHARACTER 6 0 No
DESCRIPTION SYSIBM VARCHAR 256 0 No
Relevent Database Configuration
Code:
Database territory = US
Database code page = 1208
Database code set = UTF8
Database country/region code = 1
SQL Statement and Result when run from the Command Line
Code:
SELECT description FROM errormessage WHERE errorCode = 'E123' and languageCode = 'FRA'
DESCRIPTION
-------------------------------------------------------------------------------------------------------------
Lidentité de lunité saisie est incorrecte*; veuillez vérifier celle-ci sur lécran A propos de puis réessayez.