db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andrei Badea (JIRA)" <derby-...@db.apache.org>
Subject [jira] Created: (DERBY-1335) The object names in SQLException messages are not in UTF-16
Date Fri, 19 May 2006 12:16:30 GMT
The object names in SQLException messages are not in UTF-16
-----------------------------------------------------------

         Key: DERBY-1335
         URL: http://issues.apache.org/jira/browse/DERBY-1335
     Project: Derby
        Type: Bug

  Components: Network Client  
    Versions: 10.1.2.1    
 Environment: Debian unstable, Linux 2.6.14.2, libc 2.3.5-8, Sun JDK 1.5.0_05-b05, Derby 10.1.2.1
    Reporter: Andrei Badea
    Priority: Minor


The object names in SQLException messages are not in UTF-16, although they are sent to the
server in that encoding. For example, when adding a both NULL and UNIQUE column the resulting
exception message will contain the column name (like in "'é' cannot be a column of a primary
key or unique key because it can contain null values.'). If the column name contained characters
outside the range U+0000..U+007F these characters are not encoded in UTF-16 in the exception
message. Can only reproduce with the client driver, the embedded driver behaves as expected.

Code to reproduce the issue (have a database called "sample" containing a table called "TEST"):

-----%<-----
import java.sql.Connection;     
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class MainDerby {

    public static void main(String[] args) throws Exception {
        Class.forName("org.apache.derby.jdbc.ClientDriver");
        
        Connection conn = DriverManager.getConnection("jdbc:derby://localhost:1527/sample",
"app", "app");
        try {
            String tableName = "é";
            System.out.println("Table name code point: " + (int)tableName.charAt(0));
            Statement stmt = conn.createStatement();
            stmt.executeUpdate("ALTER TABLE test ADD \"" + tableName + "\" INT UNIQUE");
        } catch (SQLException e) {
            String message = e.getMessage(); // 'ĂŠ' cannot be a column of a primary key
or unique key because it can contain null values.
            System.out.println("Exception message: " + message);
            System.out.print("Table name code points in exception message: ");
            if (message.charAt(0) == '\'') { // 
                int i = 1;
                char ch = message.charAt(i);
                while (ch != '\'') {
                    System.out.print((int)ch);
                    System.out.print(" ");
                    i++;
                    ch = message.charAt(i);
                }
            }
            System.out.println();
        } finally {
            conn.close();
        }
    }
}
-----%<-----

This program produces the following output:

-----%<-----
Table name code point: 233
Exception message: 'ĂŠ' cannot be a column of a primary key or unique key because it can
contain null values.
Table name code points in exception message: 258 352 
-----%<-----

Note "ĂŠ" is the UTF-8 representation of "é".

This was initially reported as NetBeans issue 76584 (http://www.netbeans.org/issues/show_bug.cgi?id=76584).


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message