jdbcodbcdriver example java ms-access jdbc odbc jdbc-odbc

example - Problemas de carácter Unicode Java ODBC MS-Access



sun.jdbc.odbc.jdbcodbcdriver download (2)

Si llama a ResultSet.first () o ResultSet.last (), debe inicializar correctamente Statement o PreparedStatement:

PreparedStatement ps =conn.prepareStatement("SELECT * FROM T1",ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

@Gord, gracias por todo lo que está haciendo sobre UCanAccess.

Estoy tratando de hacer una aplicación que se conecta a una base de datos de Access. He logrado establecer la conexión ODBC de mi programa Java con un archivo .mdb, pero tengo este problema con los caracteres Unicode. Si un registro está escrito en caracteres ingleses (latinos), entonces el archivo .mdb reconoce los caracteres, pero si el registro está escrito en griego, aparecen algunos caracteres extraños y no puedo obtener el registro con el objeto ResultSet. ¿Alguien puede ayudar?


El puente JDBC-ODBC no funcionará correctamente con el controlador ODBC de acceso cuando las cadenas contienen caracteres Unicode cuyo punto de código es superior a U + 007F. Los caracteres griegos entran en esa categoría, por lo que el enfoque del puente JDBC-ODBC no funcionará para usted. (Más detalles aquí .) Además, el Puente JDBC-ODBC se ha eliminado de Java (desde Java 8).

Para obtener el soporte adecuado para los caracteres griegos, recomendaría usar UCanAccess . Para obtener una descripción general de cómo configurarlo, consulte otra de mis respuestas aquí .

Una vez que su proyecto se haya configurado para usar UCanAccess, puede trabajar con su base de datos de Access usando un código como este:

Connection conn=DriverManager.getConnection( "jdbc:ucanaccess://C:/__tmp/unicode.accdb"); String language = "Greek"; PreparedStatement ps = conn.prepareStatement( "SELECT [word], [english_equiv] " + "FROM [vocabulary] " + "WHERE language=?"); ps.setString(1, language); ResultSet rs = ps.executeQuery(); while (rs.next()) { System.out.println(String.format( "/"%s/" is %s for /"%s/".", rs.getString("word"), language, rs.getString("english_equiv"))); } rs.close(); ps.close(); String newWord = "ηλεκτρονικός υπολογιστής"; String newEnglishEquiv = "computer"; ps = conn.prepareStatement( "INSERT INTO [vocabulary] ([word], [language], [english_equiv]) " + "VALUES (?,?,?)"); ps.setString(1, newWord); ps.setString(2, language); ps.setString(3, newEnglishEquiv); ps.executeUpdate(); System.out.println(String.format( "/"%s/" has been added to the table.", newWord));

Ese código produce la siguiente salida de consola:

"γιορτή" is Greek for "feast" "ηλεκτρονικός υπολογιστής" has been added to the table.

(Traducciones cortesía de Google Translate ).