Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Опять про работу с кодировкой 
:(
    Опции темы
Aprol
Дата 7.3.2009, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



База данных в кодировке Utf-8.
Не могу сохранить кириллицу, в базе просто пустое поле.
Пробовал вот так писать:
Код

    public static int createCategory(Category category) {
        try {
            org.firebirdsql.pool.FBWrappingDataSource dataSource =
                    new org.firebirdsql.pool.FBWrappingDataSource();
            dataSource.setDatabase(url);  // Путь к БД
            dataSource.setDescription("");
            dataSource.setType("TYPE4");
            dataSource.setEncoding("WIN1251");
            dataSource.setLoginTimeout(10);
            Connection connection = null;
            connection = dataSource.getConnection("sysdba", "masterkey");
            PreparedStatement pstmt = connection.prepareStatement("insert into categories(NAME_CATEGORY)values(?)");
           String str=new String(category.getName().getBytes("UTF-8"),"UTF-8");
            pstmt.setString(1,str);
            pstmt.executeUpdate();
            pstmt.close();

            return 1;
        }
        catch (SQLException e) {
            e.printStackTrace();
            return 0;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();  return 0;
        }

    }

Помогите решить
PM MAIL   Вверх
tux
Дата 7.3.2009, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 31
Всего: 132



Во-первых, если база в UTF-8, почему ты выставляешь виндовую кодировку для источника данных?
Код

dataSource.setEncoding("WIN1251");

Во-вторых, убери эту страшную конструкцию:
Код

String str=new String(category.getName().getBytes("UTF-8"),"UTF-8");

В Java все строки в юникоде, нет смысла что-то преобразовывать если конечно у тебя из какого-то внешнего источника строки не пришли уже неправильно кодированные.
PM MAIL Skype GTalk Jabber YIM   Вверх
Aprol
Дата 7.3.2009, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



tux, все равно работать не будет, так как ты написал, было изначально
А потом я уже начал пробывать варианты с кодировкой.
Начальный вариант

Код

public static int createCategory(Category category) {
        try {
            org.firebirdsql.pool.FBWrappingDataSource dataSource =
                    new org.firebirdsql.pool.FBWrappingDataSource();
            dataSource.setDatabase(url);  // Путь к БД
            dataSource.setDescription("");
            dataSource.setType("TYPE4");
            dataSource.setEncoding("UTF-8");
            dataSource.setLoginTimeout(10);
            Connection connection = null;
            connection = dataSource.getConnection("sysdba", "masterkey");
            PreparedStatement pstmt = connection.prepareStatement("insert into categories(NAME_CATEGORY)values(?)");
            pstmt.setString(1,category.getName());
            pstmt.executeUpdate();
            pstmt.close();

            return 1;
        }
        catch (SQLException e) {
            e.printStackTrace();
            return 0;
        }

    }

И еще в таком случае вылазит ошибка:

org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544849. No message for code 335544849 found.
    at org.firebirdsql.jdbc.AbstractPreparedStatement.internalExecute(AbstractPreparedStatement.java:711)
    at org.firebirdsql.jdbc.AbstractPreparedStatement.executeUpdate(AbstractPreparedStatement.java:171)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.firebirdsql.pool.PooledPreparedStatementHandler.invoke(PooledPreparedStatementHandler.java:172)
    at org.firebirdsql.pool.$Proxy3.executeUpdate(Unknown Source)
    at common.TaskManager.createCategory(TaskManager.java:135)
    at actions.admin.tasks.AddCategory.execute(AddCategory.java:26)
    at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
    at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
    at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
    at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
    at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:595)
at org.firebirdsql.gds.GDSException: No message for code 335544849 found.
    at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.readStatusVector(AbstractJavaGDSImpl.java:2104)
    at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.receiveResponse(AbstractJavaGDSImpl.java:2054)
    at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.iscDsqlExecute2(AbstractJavaGDSImpl.java:1146)
    at org.firebirdsql.gds.impl.GDSHelper.executeStatement(GDSHelper.java:222)
    at org.firebirdsql.jdbc.AbstractPreparedStatement.internalExecute(AbstractPreparedStatement.java:707)
    at org.firebirdsql.jdbc.AbstractPreparedStatement.executeUpdate(AbstractPreparedStatement.java:171)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.firebirdsql.pool.PooledPreparedStatementHandler.invoke(PooledPreparedStatementHandler.java:172)
    at org.firebirdsql.pool.$Proxy3.executeUpdate(Unknown Source)
    at common.TaskManager.createCategory(TaskManager.java:135)
    at actions.admin.tasks.AddCategory.execute(AddCategory.java:26)
    at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
    at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
    at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
    at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
    at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:595)


Это сообщение отредактировал(а) Aprol - 8.3.2009, 07:06
PM MAIL   Вверх
Aprol
Дата 8.3.2009, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



А если вот так вот сделать то все работает без ошибок и в базу пишет нормально:
добавляю метод
Код

 public static String deCode(String reqstring) {
        InputStream is = new StringBufferInputStream(reqstring);
        int b;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        try {
            while ((b = is.read()) != -1) {
                baos.write(b);
            }
        } catch (IOException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }


        String s = baos.toString();
        return s;
    }

Потом в месте где происходит присваивание значения 
Код

            PreparedStatement pstmt = connection.prepareStatement("insert into categories(NAME_CATEGORY)values(?)");
                        pstmt.setString(1,deCode(category.getName()));

Что-то я запутался, разъясните.
 smile Такой вариант меня не совсем устраивает.Производительность сильно упадет?
Код

String s = baos.toString();

И когда конкретно указываю чтобы кодировал в utf-8, вылазит ошибка при сохранении в бд, при дефолтной кодировке все нормуль

Это сообщение отредактировал(а) Aprol - 8.3.2009, 07:30
PM MAIL   Вверх
tux
Дата 8.3.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 31
Всего: 132



Aprol, судя по тому что выдает гугль такая же проблема есть с .NET провайдером, причем только с кодировкой UTF-8. Видимо рационального объяснения проблемы нет. 
PM MAIL Skype GTalk Jabber YIM   Вверх
Aprol
Дата 9.3.2009, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



tux, ошибка в JDBC что-ли?
Вот подумал может tomcat гдючит,скачаю новую версию и поробую
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0661 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.