如何使用PostgreSQL中的JSONB数据类型(一)

  • 时间:
  • 浏览:2
  • 来源:5分排列3APP下载_5分排列3APP官方

JSON数据类型在当前互联网浪潮中得到了一定量的采用,见下图GOOGLE指数对比JSON和XML,从全球范围来看:

防止法律法律依据有:

2. 数据库返回多行数据:如获取用户参与的项目

WITH myProjects AS (select a.id,a.title from TProject a where a.creatorId = 1)

总结一下:



1. 数据库最多只会返回一行数据,很久 转加上JSON对象:如通过用户id获得用户JSON对象

select c.*,d.* from

注意的是,只能用row()函数,可能无法产生别名,即正如https://www.postgresql.org/docs/9.6/static/functions-json.html里所演示的那样:

WITH myInfo AS (select a.id,a.realName from TUsers a where a.id = 1 )

{

"issuccessful":"true",

"data":{

"id":1,

"realname":"test1"

}

}

好,JAVA这个块,大伙分多种请况来分析:

(SELECT array_to_json(array(select row_to_json(myProjects.*) from myProjects),false) as myProjects) b

运行环境:PG 9.6,WIN8.1 64,Tomcat 8.0,JDK 8

TUsers a where a.id = 1

返回:

SELECT row_to_json(b.*) from

本系列博文讲述使用PG JSON/JSONB类型考虑的问题,这是第一篇(我尽量写的简单,让初学者跟着做很容易还都都还后能 重复实验),看看不使用JSON/JSONB,仅仅使用row_to_json()函数能我要们做这个。

) x

大伙来做个实验:

从中国范围来看,JSON搜索热度明显高于XML:

myInfo c,

里边的核心是SQL:SELECT row_to_json(a.*) from TUsers a where a.id = 1

{

"myprojects":[

{

"id":3,

"title":"测试项目3"

},

{

"id":2,

"title":"测试项目2"

},

{

"id":1,

"title":"测试项目1"

}

],

"id":1,

"realname":"test1"

}

关于这个问题还时要参考:http://dba.stackexchange.com/questions/27732/set-names-to-attributes-when-creating-json-with-row-to-json

SELECT row_to_json(a.id,a.realName) from TUsers a where a.id = 1

SELECT row_to_json(b.*) from myInfo b

myProjects AS (select a.id,a.title from TProject a,myInfo b where a.creatorId = b.id) -- 多行数据

SELECT

DB设计图(在Eclipse用ERMaster反向生成)如下:

测试一下,当大伙发送:http://localhost:3030/jsonTest/user?action=getuserinfo&userid=1

public class UserWS extends HttpServlet :

SELECT row_to_json(a.*) from (select b.id,b.realName from TUsers b where b.id = 1 ) a



浅蓝色表示JSON的趋势,成明显的上升趋势。

可能:

可能使用WITH:

(

from

有些有些综合以上,建议用WITH法律法律依据,简洁明了。

返回:

(SELECT row_to_json(_) from (select a.id, a.realName) as _)

既然DB支持了JSON和JSON相关函数,是就有里边服务层(如PHP,JAVA)通过JDBC还时要直接获取到JSON数据,而不想再用org.json和json-lib库把很久 的行数据进行转换?

SELECT row_to_json(x.*) from

仅仅使用PG的row_to_json(),即可轻松返回时要的各种SQL数据。那么 子使得里边层(JAVA/PHP)的代码变得多样化,不想org.json和json-lib库再做一次封装,这是架构师要注意的一有另另另三个 多重要趋势。

那可能我获得的就有a.*,即不时要一整行数据(如密码不想返回)为何办?如下会报错:

(SELECT array_to_json(array(select row_to_json(myProjects.*) from myProjects),false) as myProjects) d -- 把多行数据生成一行一列json数组



WITH myInfo AS (select id,realName from TUsers where id = 1 ), -- 一行数据

PG也从9.2很久 开始正式引入JSON类型,那自然就问:

3. 返回有些表的一行数据,加上有些表的多行数据:如获取用户基本信息以及用户参与的项目

测试一下:http://localhost:3030/jsonTest/project?action=getmyprojects&userid=1

该SQL返回: