【 使用环境 】测试环境
【 使用版本 】5.7.25-OceanBase_CE-v4.2.1.4
【 HikariCP版本 】4.0.3
【 mysql-connector-java 】8.0.29
问题描述
从下图可以看到获取到的parameterMetaData中的fields数组明显是错误的,长度为3(少1),且其中的各个字段都未正确获取到(MySQL数据库能正常获取到)
建表语句
create table test (
a varchar(10) primary key,
b int,
c int,
d decimal(16,8)
);
代码
public static void main(String[] args) {
String sql = "INSERT INTO test(a,b,c,d) \n" +
"VALUES (?,?,?,?)";
HikariDataSource dataSource = new HikariDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://ip:port/test?rewriteBatchedStatements=true&useServerPrepStmts=true&useCursorFetch=true");
dataSource.setUsername("root@sys");
try(Connection connection = dataSource.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(sql)){
ParameterMetaData parameterMetaData = preparedStatement.getParameterMetaData();
System.out.println("----------");
} catch (Exception e){
e.printStackTrace();
} finally {
dataSource.close();
}
}
造成的影响
该问题是我在用springBatch批量写入报空指针异常后发现的(oceanbase作为被写入方),在获取field时,入参数量30,第29时收到报文EOF导致跳过,最终在getColumnType的if判断中f=null