Próbuję użyć "New Methods for National Character Set Type Data in JDK 1.6", aby uzyskać standardowego JDBC rozwiązanie do obsługi cyrylicy znaków, ale gdy wykonanie osiągnie każdą linię typu nvarchar, na przykład :Korzystanie Types.NVARCHAR ze sterownika Oracle JDBC do pracy z cyrylicy znaków
preparedSelect.setObject(3, "суббота", Types.NVARCHAR);
Następnie otrzymuję ten wyjątek:
java.sql.SQLException: Invalid column type
at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:131)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:197)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:261)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:269)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:490)
at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical(OraclePreparedStatement.java:7922)
at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:7502)
at oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:7975)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.setObject(OraclePreparedStatementWrapper.java:222)
próbowałem również użyć setNString(), ale pojawia się jeszcze bardziej dziwne wyjątek:
java.lang.AbstractMethodError: oracle.jdbc.driver.OraclePreparedStatementWrapper.setNString(ILjava/lang/String;)V
Jeśli używam java -Doracle.jdbc.defaultNChar = true myApplication ze zwykłymi Typami.VARCHAR, rosyjskie słowa są przechowywane poprawnie. Ale używanie opcji -Doracle.jdbc.defaultNChar = true nie jest opcją, ponieważ pracuję nad starszą aplikacją, nie mam kontroli nad uruchomieniem środowiska produkcyjnego, po prostu piszę do niego komponent. Ponadto ten "Readme for NChar How-to" stwierdza, że "ta konwersja ma znaczny wpływ na wydajność". Tak ustawia domyślnie wszystko do NChar, gdy tylko mniej niż 1% moich tabel potrzebuje tej konwersji, a nie jest to dobry wybór.
Używam cienkiego sterownika Oracle i mam plik ojdbc6.jar i orai18n.jar w mojej ścieżce klas.
Szukam standardowego rozwiązania JDBC. Nie mogę użyć żadnych metod lub stałych z "oracle" na nich. OraclePreparedStatement nie jest dla mnie opcją.
Próbowałem używać Types.NVARCHAR z serwerem MSSQL i działa dobrze.
Próbowałaś użyciu setNString() i sprawdzić, czy to działa? –
Edytowałem moje pytanie z aktualizacją o setNString() –
Aby wykluczyć oczywiste: czy próbowałeś wywołać stare dobre 'setString()'? Z powodzeniem zapisałem w tym arabskie znaki. –