Уже не знаю что придумывать: Не могу разобраться с кодировкой. Русские буквы либо вообще не сохраняются в бд либо криво . Использую struts 2.0, бд firebird. Сначала не отображались корректно Formbeans, я прикрутил фильтр Код | package filters; import java.io.IOException; import javax.servlet.*; public class UTF8Filter implements Filter { public void destroy() {} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("UTF8"); chain.doFilter(request, response); } public void init(FilterConfig filterConfig) throws ServletException { } }
|
beanы стали нормально отрабатывать. Зато теперь русский текст не пишется в базу... Так сохраняю в бд Код | 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"); // ������� ��������� System.out.println(taskBD.getName()); PreparedStatement pstmt = connection.prepareStatement("insert into tasks(name,package_name,task_key,id_user,id_category,definition,create_date)values(?,?,?,?,?,?,?)"); pstmt.setString(1, taskBD.getName()); pstmt.setString(2,taskBD.getPackage_name()); pstmt.setString(3,taskBD.getTask_key()); pstmt.setNull(4,1); pstmt.setInt(5,taskBD.getId_category()); pstmt.setDate(7,taskBD.getCreate_date()); try { ByteArrayOutputStream out = new ByteArrayOutputStream(); ObjectOutputStream outputStream = new ObjectOutputStream(out); outputStream.writeObject(taskBD.getDefinition()); outputStream.close(); pstmt.setBytes(6, out.toByteArray()); } catch (IOException e) { e.printStackTrace(); } pstmt.executeUpdate(); pstmt.close(); return 0; } 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.createTask(TaskManager.java:84) at actions.admin.tasks.AddTask.execute(AddTask.java:53) at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:5 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.doPost(ActionServlet.java:462) at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) 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:18 at filters.UTF8Filter.doFilter(UTF8Filter.java:15) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:18 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:10 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:52 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.createTask(TaskManager.java:84) at actions.admin.tasks.AddTask.execute(AddTask.java:53) at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:5 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.doPost(ActionServlet.java:462) at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) 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:18 at filters.UTF8Filter.doFilter(UTF8Filter.java:15) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:18 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:10 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:52 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) ________________________________________
|
Если проверять перед запросом значения в отладчике то они корректно отображаются. System.out.print тоже корректно выводит русские буквы Я себе уже мозг сломал. Предоставляю такую возможность и вам))) Добавлено @ 05:38Нормально сохраняет в базу только в след. случае: Убираю фильтр. Строки приходят в Action в виде ???????(Это же cp1251?). Делаю такую бредовую операцию: Код | 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 = null; try { s = baos.toString("cp1251"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } return s; }
|
_____________ строка например: ывфы перекодируется в ывфы и потом успешно сохраняется в БД. При этом beans перестает корректно работать, например поля при повторной загузке заполняет чем-то вот таким ÑÑвÑÑв ужс да и только((( короче получается выбирай:или нормально работающие beans или сохранение в БД Это сообщение отредактировал(а) powerOn - 27.3.2009, 09:14
|