java insert数组到postgres数据库
数组格式在数据库中并不是常用操作,比较常用的是字符串存储后,使用时再进行数据加工.这里记录下直接操作postgres insert数组的数据操作.
表结构
CREATE TABLE schema.table(
report_rows json NULL,
series _varchar NULL
)
实际存在两种数组结构:1 字符串数组 2 json数组. json数组使用json进行存储,也可以是jsonb二进制存储方式,但是二进制数据虽然更快,但在数据库中不直观,这里就使用了json.
方式1: 指定数组数据类型
@Data
public static class SelfData {
public String[] series;
public JsonNode report_rows;
}
public void insertArrayTopostgres() {
String dataStr="{\"series\":[\"2024/06/18 00:00:00\"],\"rows\":[{\"sum\":[34517],\"values\":[[204],[132]],\"byValue\":[\"i am robot\"]}]}";
SelfData selfData = JsonUtils.parseStr(dataStr, SelfData.class);
String url2 = "jdbc:postgresql://localhost:5432/mydatabase";
String user = "myuser";
String password = "mypassword";
try (Connection connection = DriverManager.getConnection(url2, user, password)) {
// json存储要求是json字符串格式
String jsonRows = objectMapper.writeValueAsString(selfData.getReport_rows());
// 这里是数据库数组类型(java.sql.Array)的关键处理. "varchar"用于指定数组内的数据类型 selfData.getSeries()是实际的数据
Array series = connection.createArrayOf("varchar", selfData.getSeries());
String sql = "INSERT INTO schema.table (report_rows, series) VALUES(?, ?)";
try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setObject(1, jsonRows);
preparedStatement.setArray(2, series);
preparedStatement.executeUpdate();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
数据库实际存储效果
方式2: sql中直接指定数据类型,不在代码中进行类型指定
Object execute = jdbcTemplatePostgres.execute("INSERT INTO schema.table (report_rows, series) VALUES(?::json, ?::_varchar);", new PreparedStatementCallback<Object>() {
@Override
public Object doInPreparedStatement(PreparedStatement ps) throws SQLException {
String[] split = "report_rows, series".split(",");
for (int i = 0; i < split.length; i++) {
ps.setObject(i + 1, ReflectUtils.getFieldValue(data, split[i].trim()));
}
return ps.executeUpdate();
}
});
代码实现上很简单.sql语句才是精髓: INSERT INTO schema.table (report_rows, series) VALUES(?::json, ?::_varchar);
喜欢关注一下,不喜欢点评一下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2019-06-20 负载均衡架构