powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема с MyBatis
4 сообщений из 4, страница 1 из 1
Проблема с MyBatis
    #39345883
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день

Использую MyBatis для работы с БД.

При запуске на дев среде все работает, а когда переношу на продакш все время получаю следующую ошибку:


автор### Error querying database. Cause: java.lang.NumberFormatException
### The error may exist in com/savvymoney/dailyregistration_nf/conf/ProMapper.xml
### The error may involve com.savvymoney.dailyregistration_nf.mapper.ProDbMapper.getProductionMembers
### The error occurred while handling results
### SQL: SELECT ....
### Cause: java.lang.NumberFormatException
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:26) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:111) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102) ~[mybatis-3.2.8.jar:3.2.8]
at com.savvymoney.dailyregistration_nf.service.ReportService.reportCollector(ReportService.java:60) ~[daily_registaration-1.0-SNAPSHOT.jar:na]
at com.savvymoney.dailyregistration_nf.service.ReportService.getReport(ReportService.java:48) ~[daily_registaration-1.0-SNAPSHOT.jar:na]
at com.savvymoney.dailyregistration_nf.service.ReportService.getJRDataSource(ReportService.java:29) ~[daily_registaration-1.0-SNAPSHOT.jar:na]
at com.savvymoney.custom_datasource.SavvyMoneyQueryExecutor.createDatasource(SavvyMoneyQueryExecutor.java:37) [sm-custom-datasource-1.0.jar:na]
at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1119) [jasperreports-6.0.0.jar:6.0.0]
at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:691) [jasperreports-6.0.0.jar:6.0.0]
at net.sf.jasperreports.engine.fill.BaseReportFiller.setParameters(BaseReportFiller.java:434) [jasperreports-6.0.0.jar:6.0.0]
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:508) [jasperreports-6.0.0.jar:6.0.0]
at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFill.run(BaseFillHandle.java:120) [jasperreports-6.0.0.jar:6.0.0]
at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$SynchronousExecutor.execute(EngineServiceImpl.java:882) [jasperserver-api-engine-impl-6.0.1.jar:na]
at net.sf.jasperreports.engine.fill.BaseFillHandle.startFill(BaseFillHandle.java:165) [jasperreports-6.0.0.jar:6.0.0]
at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$AsynchronousReportFiller.fillReport(EngineServiceImpl.java:838) [jasperserver-api-engine-impl-6.0.1.jar:na]
at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl.fillReport(EngineServiceImpl.java:1727) [jasperserver-api-engine-impl-6.0.1.jar:na]
at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$ReportFill.runWithDataSource(EngineServiceImpl.java:1082) [jasperserver-api-engine-impl-6.0.1.jar:na]
at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$ReportFill.runReport(EngineServiceImpl.java:1011) [jasperserver-api-engine-impl-6.0.1.jar:na]
at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl$ReportRunnable.run(EngineServiceImpl.java:904) [jasperserver-api-engine-impl-6.0.1.jar:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_80]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_80]
at java.lang.Thread.run(Thread.java:745) [na:1.7.0_80]
Caused by: java.lang.NumberFormatException: null
at java.math.BigDecimal.<init>(BigDecimal.java:470) ~[na:1.7.0_80]
at java.math.BigDecimal.<init>(BigDecimal.java:739) ~[na:1.7.0_80]
at org.mariadb.jdbc.internal.common.AbstractValueObject.getInt(AbstractValueObject.java:109) ~[mariadb-java-client-1.1.2.jar:na]
at org.mariadb.jdbc.MySQLResultSet.getInt(MySQLResultSet.java:140) ~[mariadb-java-client-1.1.2.jar:na]
at org.mariadb.jdbc.MySQLResultSet.getInt(MySQLResultSet.java:144) ~[mariadb-java-client-1.1.2.jar:na]
at org.apache.ibatis.type.IntegerTypeHandler.getNullableResult(IntegerTypeHandler.java:37) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.type.IntegerTypeHandler.getNullableResult(IntegerTypeHandler.java:26) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:55) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getPropertyMappingValue(DefaultResultSetHandler.java:393) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyPropertyMappings(DefaultResultSetHandler.java:367) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:341) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:294) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:269) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:239) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:153) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:60) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:73) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:60) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:267) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:137) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:96) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:77) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:108) ~[mybatis-3.2.8.jar:3.2.8]


И на дев среде и на продакш использую ту самую БД, запрос, код, версию MyBatis 3.2.8
Не могу понять где проблема
...
Рейтинг: 0 / 0
Проблема с MyBatis
    #39346193
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis111111,

авторCaused by: java.lang.NumberFormatException: null


Приходит null из базы скорее всего и падает конвертор для этой колонки.

С уважением, Валентин
...
Рейтинг: 0 / 0
Проблема с MyBatis
    #39347512
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решение нашел.

MyBatis почему-то не мог коректно замапить BIT(Mysql) значение к Integer.
Пришлось писать typeHandler для этого поля в энтити

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
import java.sql.*;
import java.sql.SQLException;
import org.apache.ibatis.type.*r;

public class CustomTypeHandler implements TypeHandler {

    @Override
    public void setParameter(PreparedStatement ps, int i, Object t, JdbcType jt) throws SQLException {
     }

    @Override
    public Object getResult(ResultSet rs, String string) throws SQLException {
       byte dormant = rs.getByte(string);
       return (int) dormant;
    }



Суть в том что в БД нет NULL значений и как этот NULL пробирался в MyBatis не могу понять.
Может другая версия драйвера jdbc по другому обрабатывает BIT значение.
...
Рейтинг: 0 / 0
Проблема с MyBatis
    #39347709
gals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я так думаю, что исходные данные, в Java объекте (параметре) у вас в виде строки (java.lang.String). У вас не NULL идет в базу, а пустая строка, которая не может преобразоваться в числовое представление.
В этом случае вам надо написать свой вариант TypeHandler. И в операторах @Insert, @Update, @Select указать
#{field, jdbcType=NUMERIC, jdbcHandler=com.myapp.MyDataHandler}
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема с MyBatis
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]