Java访问PG后台代码执行流程
分享
直接执行:stmt.executeQuery(select 语句)
执行流程ReadCommand--->message 'Q'----->exec_simple_query--->(PS状态为SELECT)
finish_xact_command&&send_ready_for_query=true--->(PS状态为SELECT)
下一个循环由于send_ready_for_query为true,设置PS状态为idle,并执行
发送结束标志服'Z'
并执行pg_flush将最后一块内存信息发送给客户端,客户端接到‘Z’后才会返回。
绑定变量
conn.prepareStatement(select语句)
ps.set....
上两行代码都是本地执行,与服务器并没有交互
ps.execute(); 这不才开始与服务器交互
交互流程
ReadCommand ----> message 'P' ----> exec_parse_message---->(PS状态为PARSE)
ReadCommand-----> message 'B' ------> exec_bind_message----->(PS状态为BIND)
ReadCommand------>message 'D'------->exec_describe_******_message->(PS状态为BIND)
ReadCommand------>message 'E'-------->exec_execute_message------->(PS状态为SELECT)
ReadCommand------>message 'S'--------->finish_xact_command&&send_ready_for_query=true--->(PS状态为SELECT)
下一个循环由于send_ready_for_query为true,设置PS状态为idle
并执行
并执行pg_flush将最后一块内存信息发送给客户端,客户端接到‘Z’后才会返回。
直接执行:stmt.executeQuery(select 语句)
执行流程ReadCommand--->message 'Q'----->exec_simple_query--->(PS状态为SELECT)
finish_xact_command&&send_ready_for_query=true--->(PS状态为SELECT)
下一个循环由于send_ready_for_query为true,设置PS状态为idle,并执行
case DestRemoteSimple: if (PG_PROTOCOL_MAJOR(FrontendProtocol) >= 3)
{
StringInfoData buf;
pq_beginmessage(&buf, 'Z');
pq_sendbyte(&buf, TransactionBlockStatusCode());
pq_endmessage(&buf);
发送结束标志服'Z'
并执行pg_flush将最后一块内存信息发送给客户端,客户端接到‘Z’后才会返回。
绑定变量
conn.prepareStatement(select语句)
ps.set....
上两行代码都是本地执行,与服务器并没有交互
ps.execute(); 这不才开始与服务器交互
交互流程
ReadCommand ----> message 'P' ----> exec_parse_message---->(PS状态为PARSE)
ReadCommand-----> message 'B' ------> exec_bind_message----->(PS状态为BIND)
ReadCommand------>message 'D'------->exec_describe_******_message->(PS状态为BIND)
ReadCommand------>message 'E'-------->exec_execute_message------->(PS状态为SELECT)
ReadCommand------>message 'S'--------->finish_xact_command&&send_ready_for_query=true--->(PS状态为SELECT)
下一个循环由于send_ready_for_query为true,设置PS状态为idle
并执行
case DestRemoteSimple: if (PG_PROTOCOL_MAJOR(FrontendProtocol) >= 3)
{
StringInfoData buf;
pq_beginmessage(&buf, 'Z');
pq_sendbyte(&buf, TransactionBlockStatusCode());
pq_endmessage(&buf);
发送结束标志服'Z'并执行pg_flush将最后一块内存信息发送给客户端,客户端接到‘Z’后才会返回。
0 个评论
相关问题
- 在Visual studio 2015 中使用 Arcgis API for JavaScript v3.16 如何实现代码智能提示?
- arcgis Api for java script 4.4部署离线环境
- 访问arcgisserver发布的服务,提示要输入用户名密码,验证登录
- arcgis datastore安装后无法访问配置页面
- arcgis 门户能正常访问,但是arcgis server 管理界面打不开?
- 网站用arcgis API for JavaScript写好,发布网站之后,别人访问无法加载地图?
- 用js调用portal中用户所发布的webmap并在该地图上添加点如何用代码实现,我的总是报错。。。。
- 按照Engine+开发手册ArcEngine_10.0_C#二次开发编写的鹰眼的代码,运行时鹰眼不显示!
- ArcGIS无法访问身份验证服务
- ArcGIS API for JavaScript每次访问ArcGIS Server都得登录
- 关于ArcGIS Pro的矢量切片保留属性数据及前端属性数据访问问题