使用JdbcTemplate将字节数组存储到MySQL二进制列中

时间:2016-09-20 22:46:02

标签: mysql spring-jdbc jdbctemplate

我有一个MySQL表(简化):

CREATE TABLE `tokens` (
    `token` BINARY(16) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我尝试插入这样的行:

JdbcTemplate jdbcTemplate; // org.springframework.jdbc.core.JdbcTemplate
...
String sql = "INSERT INTO `tokens` (`token`) VALUES (?)";
String token = "123e4567e89b12d3a456426655440000"; // UUID
jdbcTemplate.update(sql, new Object[]{token.getBytes()});

但我得到了这个例外:

Data truncation: Data too long for column 'token' at row 1  

我做错了什么?感谢。

编辑:看到我的回答,我错过了十六进制转换(令牌是UUID)。

1 个答案:

答案 0 :(得分:0)

以下是存储令牌(即UUID)的解决方案:

jdbcTemplate.update(sql, new Object[]{DatatypeConverter.parseHexBinary(token)});

如果还有其他方法,请告诉我们......