您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

JDBC读写Postgresql jsonb类型数据最佳兼容方案

时间:2021-12-23 11:43:54  来源:  作者:dingle

前言

JDBC访问Postgresql的jsonb类型字段当然可以使用Postgresql jdbc驱动中提供的PGobject,但是这样在需要兼容多种数据库的系统开发中显得不那么通用,需要特殊处理。本文介绍一种更通用的方式。

JDBC URL中添加参数

在Postgresql的jdbc url中可以添加一个参数,如下:

jdbc:postgresql://xxx.xxx.xxx:5432/postgres?stringtype=unspecified

官方对stringtype参数的解释是:

stringtype : String

Specify the type to use when binding PreparedStatement parameters set via setString(). If stringtype is set to VARCHAR (the default), such parameters will be sent to the server as varchar parameters. If stringtype is set to unspecified, parameters will be sent to the server as untyped values, and the server will attempt to infer an Appropriate type. This is useful if you have an existing application that uses setString() to set parameters that are actually some other type, such as integers, and you are unable to change the application to use an appropriate method such as setInt().

因此当stringtype=unspecified 时,statement.setString()方法的参数将以未知的类型发送给pg数据库,由数据库根据表中字段的类型进行推定和自动转换。也就是说我们可以以字符串形式给postgresql数据库中各种类型的数据进行赋值,当然也可以支持jsonb类型。

JDBC代码示例

建测试表:

create table t_test( name varchar(20) primary key, props jsonb);

插入数据:

Class.forName("org.postgresql.Driver");

Connection con = null;

try {

String url="jdbc:postgresql://xxxx.xxxx.xxxx:5432/postgres?stringtype=unspecified";

con = DriverManager.getConnection(url, "username", "password");

con.setAutoCommit(false);

 

String sql= "insert into t_test(name, props) values(?,?)";

PreparedStatement statement = con.prepareStatement();

statement.setString(1, "zhangsan");

statement.setString(2, "{"age":23, "email":"zhangsan@xxx.com"}");

statement.executeUpdate();

con.commit();

} catch (Exception ex) {

ex.printStackTrace();

con.rollback();

} finally {

if (con != null) {

con.close();

}

}



Tags:JDBC   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言JDBC访问Postgresql的jsonb类型字段当然可以使用Postgresql jdbc驱动中提供的PGobject,但是这样在需要兼容多种数据库的系统开发中显得不那么通用,需要特殊处理。本文介绍...【详细内容】
2021-12-23  Tags: JDBC  点击:(12)  评论:(0)  加入收藏
1. 介绍1.1 介绍今天开始我们来学习Java操作MySQL数据库的技巧,Java操作MySQL是借助JdbcTemplate这个对象来实现的。JdbcTemplate是一个多数据库集中解决方案,而我们今天只讲...【详细内容】
2021-11-05  Tags: JDBC  点击:(30)  评论:(0)  加入收藏
Sharding-JDBC背景:出于工作的需要,非常需要详细了解数据库分表分库的内容,这样便于选择版本,了解原理及性能,做出更好的选择。Sharding-JDBC是ShardingSphere的第一个产品,也是Sh...【详细内容】
2021-05-14  Tags: JDBC  点击:(212)  评论:(0)  加入收藏
本期给大家带来的是JAVA基础中的JDBC,JDBC全称:Java DataBase Connectivity Java 数据库连接, Java语言操作数据库,说白了就是用Java语言来操作数据库。在大数据开发基础中也是...【详细内容】
2021-03-16  Tags: JDBC  点击:(142)  评论:(0)  加入收藏
前言hello我是bigsai,今天咱们进行JDBC+MySQL实战,非常适合初入门的小伙伴打开新的世界。实现一个增删改查(curd)的例子。先点赞再观看、帅哥靓女养成好习惯!在这个案例进行之...【详细内容】
2021-01-15  Tags: JDBC  点击:(187)  评论:(0)  加入收藏
背景前两天一个小伙伴面试的时候,被问JDBC底层是如何连接数据库的?他顿时一脸懵逼,因为大部分人只知道JDBC的几个步骤,至于底层到底是怎么连接数据库的,还真不知道。由于小伙伴是...【详细内容】
2020-12-28  Tags: JDBC  点击:(120)  评论:(0)  加入收藏
作者:scherman来源:segmentfault.com/a/1190000018472572因为项目需要选择数据持久化框架,看了一下主要几个流行的和不流行的框架,对于复杂业务系统,最终的结论是,JOOQ是总体上最...【详细内容】
2020-07-04  Tags: JDBC  点击:(68)  评论:(0)  加入收藏
不少学习过java,或者接触过java的人,对jdbc应该都不陌生。但是,jdbc到底是啥?有些人可能还真不知道,即便一直在用。jdbc是基于java的数据库访问接口。具体的操作步骤如下:1、加载...【详细内容】
2020-03-08  Tags: JDBC  点击:(52)  评论:(0)  加入收藏
当Mysql数据库数据达到一定量后,查询SQL执行会变慢起来,除了建索引、优化程序代码以及SQL语句等常规手段外,利用经典MHA数据库中间件做数据库读写分离是一个不错的选择。但是在读写分离架构中会出现一个共性问题:SQL读取...【详细内容】
2019-09-17  Tags: JDBC  点击:(239)  评论:(0)  加入收藏
更多内容,欢迎关注微信公众号:全菜工程师小辉~前几天笔者发布了博客,手写mybatis彻底搞懂框架原理。为了帮助初学者更好理解mybatis框架,这次讲解一下Java的JDBC的运行过程。JDB...【详细内容】
2019-08-05  Tags: JDBC  点击:(249)  评论:(0)  加入收藏
▌简易百科推荐
一、Redis使用过程中一些小的注意点1、不要把Redis当成数据库来使用二、Arrays.asList常见失误需求:把数组转成list集合去处理。方法:Arrays.asList 或者 Java8的stream流式处...【详细内容】
2021-12-27  CF07    Tags:Java   点击:(3)  评论:(0)  加入收藏
文章目录 如何理解面向对象编程? JDK 和 JRE 有什么区别? 如何理解Java中封装,继承、多态特性? 如何理解Java中的字节码对象? 你是如何理解Java中的泛型的? 说说泛型应用...【详细内容】
2021-12-24  Java架构师之路    Tags:JAVA   点击:(5)  评论:(0)  加入收藏
大家好!我是老码农,一个喜欢技术、爱分享的同学,从今天开始和大家持续分享JVM调优方面的经验。JVM调优是个大话题,涉及的知识点很庞大 Java内存模型 垃圾回收机制 各种工具使用 ...【详细内容】
2021-12-23  小码匠和老码农    Tags:JVM调优   点击:(11)  评论:(0)  加入收藏
前言JDBC访问Postgresql的jsonb类型字段当然可以使用Postgresql jdbc驱动中提供的PGobject,但是这样在需要兼容多种数据库的系统开发中显得不那么通用,需要特殊处理。本文介绍...【详细内容】
2021-12-23  dingle    Tags:JDBC   点击:(12)  评论:(0)  加入收藏
Java与Lua相互调用案例比较少,因此项目使用需要做详细的性能测试,本内容只做粗略测试。目前已完成初版Lua-Java调用框架开发,后期有时间准备把框架进行抽象,并开源出来,感兴趣的...【详细内容】
2021-12-23  JAVA小白    Tags:Java   点击:(10)  评论:(0)  加入收藏
Java从版本5开始,在 java.util.concurrent.locks包内给我们提供了除了synchronized关键字以外的几个新的锁功能的实现,ReentrantLock就是其中的一个。但是这并不意味着我们可...【详细内容】
2021-12-17  小西学JAVA    Tags:JAVA并发   点击:(10)  评论:(0)  加入收藏
一、概述final是Java关键字中最常见之一,表示“最终的,不可更改”之意,在Java中也正是这个意思。有final修饰的内容,就会变得与众不同,它们会变成终极存在,其内容成为固定的存在。...【详细内容】
2021-12-15  唯一浩哥    Tags:Java基础   点击:(14)  评论:(0)  加入收藏
1、问题描述关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。2、解决方案这次其实是碰到了一个问题,一般的情况...【详细内容】
2021-12-15  软件老王    Tags:logback   点击:(17)  评论:(0)  加入收藏
本篇文章我们以AtomicInteger为例子,主要讲解下CAS(Compare And Swap)功能是如何在AtomicInteger中使用的,以及提供CAS功能的Unsafe对象。我们先从一个例子开始吧。假设现在我们...【详细内容】
2021-12-14  小西学JAVA    Tags:JAVA   点击:(21)  评论:(0)  加入收藏
一、概述观察者模式,又可以称之为发布-订阅模式,观察者,顾名思义,就是一个监听者,类似监听器的存在,一旦被观察/监听的目标发生的情况,就会被监听者发现,这么想来目标发生情况到观察...【详细内容】
2021-12-13  唯一浩哥    Tags:Java   点击:(16)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条