当前使用版本(必须填写清楚,否则不予处理)
3.3.1
该问题是怎么引起的?(最新版上已修复的会直接close掉)
测试 demo
`@Data @TableName(value = "type_entity", autoResultMap = true) public class TypeEntity implements Serializable {
/**
* Id
*/
@TableId
private String id;
/**
* Name
*/
private String name;
/**
* Status
*/
@TableField(jdbcType = JdbcType.BIT, typeHandler = CustomBooleanHandler.class)
private boolean status;
}`
`@Slf4j
@MappedTypes({Boolean.class})
@MappedJdbcTypes({JdbcType.BIT})
public class CustomBooleanHandler extends BaseTypeHandler
@Override
public void setParameter(PreparedStatement ps, int i, Boolean parameter, JdbcType jdbcType) throws SQLException {
log.info("setParameter 被调用了...");
super.setParameter(ps, i, parameter, jdbcType);
}
@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int i, Boolean aBoolean, JdbcType jdbcType) throws SQLException {
log.info("setNonNullParameter 被调用了...");
}
@Override
public Boolean getNullableResult(ResultSet resultSet, String s) throws SQLException {
log.info("getNullableResult(ResultSet resultSet, String s) 被调用了...");
return null;
}
@Override
public Boolean getNullableResult(ResultSet resultSet, int i) throws SQLException {
log.info("getNullableResult(ResultSet resultSet, int i) 被调用了...");
return null;
}
@Override
public Boolean getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
log.info("getNullableResult(CallableStatement callableStatement, int i) 被调用了...");
return null;
}
}`
`@Mapper
public interface TypeEntityMapper extends BaseMapper
public interface TypeEntityService extends IService
@Service
public class TypeEntityServiceImpl extends ServiceImpl
`
重现步骤
@Test public void insert() { TypeEntity typeEntity = new TypeEntity(); typeEntity.setId("1"); typeEntity.setName("xxxxx"); typeEntity.setStatus(false);
typeEntityService.save(typeEntity);
}
报错信息
org.springframework.jdbc.BadSqlGrammarException:
Error updating database. Cause: java.sql.SQLException: No value specified for parameter 3
The error may exist in com/helsing/van/beeranalysis/mybatis/mapper/TypeEntityMapper.java (best guess)
The error may involve com.helsing.van.beeranalysis.mybatis.mapper.TypeEntityMapper.insert-Inline
The error occurred while setting parameters
SQL: INSERT INTO type_entity ( id, name, status ) VALUES ( ?, ?, ? )
Cause: java.sql.SQLException: No value specified for parameter 3
; bad SQL grammar []; nested exception is java.sql.SQLException: No value specified for parameter 3
Comment From: VanHelxing
setParameter 方法忘了将 Boolean 转成输值 set了,导致ps设置参数时,始终设置失败.