如何通过spring引导批处理JdbcBatchItemWriter()将java字符插入MariaDB字符(1)

如何通过spring引导批处理JdbcBatchItemWriter()将java字符插入MariaDB字符(1),java,mariadb,spring-batch,Java,Mariadb,Spring Batch,我有一个列数据类型为CHAR(1)的表。现在,我需要将JavaChar值插入到该列中。这就是创建表的方式 CREATE TABLE db1.test_table ( user_id INT NOT NULL, user_status CHAR(1) NOT NULL, last_updated DATETIME, PRIMARY KEY (user_id) )ENGINE=InnoDB DEFAULT CHARSET=latin2; Java中的字符是一个UTF-16代码单元,

我有一个列数据类型为CHAR(1)的表。现在,我需要将JavaChar值插入到该列中。这就是创建表的方式

CREATE TABLE db1.test_table (
  user_id INT NOT NULL,
  user_status CHAR(1) NOT NULL,
  last_updated DATETIME,
  PRIMARY KEY (user_id)
)ENGINE=InnoDB DEFAULT CHARSET=latin2;
Java中的字符是一个UTF-16代码单元,因此这可能是一个问题,但我们如何解决这个问题呢。我在SpringBoot批处理应用程序中使用它,我在其中读取和写入数据库。显然,reader正在将数据库CHAR(1)值设置为Java CHAR,但JdbcBatchItemWriter抛出如下错误

Caused by: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'user_status' at row 1
这是我的ItemWriter()


JDBC驱动程序正在将
字符(1)
映射到
字符串
,即使长度固定为1


我认为错误是因为JDBC驱动程序将
char
值视为一个数字,并将数字转换为
字符串。该字符串有多个数字,因此对于
CHAR(1)
列来说太长。

有什么建议吗?@Thomson将值作为
字符串提供给JDBC。将方法
char getUserStatus()
更改为
String getUserStatus()
,或者不要使用
BeanPropertyItemSqlParameterSourceProvider
,以便在映射值时可以转换类型。我将方法从char更改为String,结果成功了。我从没想过这会奏效。非常感谢你!
        @Bean
        public JdbcBatchItemWriter<UserInfo> loadUserWriter() {
            JdbcBatchItemWriter<UserInfo> writer = new JdbcBatchItemWriter<UserInfo>();
            writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());
            writer.setSql("INSERT INTO db1.test_table "
                    + "(user_id, user_status, last_updated)" 
                    + "VALUES (:userId, :userStatus, NOW())");
            writer.setDataSource(dataSource);
            return writer;
        }
            public class UserInfo {
                private int userId;
                private char userStatus;
                
                public int getUserId() {
                    return userId;
                }
                public void setUserId(int userId) {
                    this.userId = userId;
                }
                public char getUserStatus() {
                    return userStatus;
                }
                public void setUserStatus(char userStatus) {
                    this.userStatus = userStatus;
                }
                    
            }