最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
H2 Database学习笔记一 jdbc与TcpServer的交互
时间:2013-09-27 编辑:简简单单 来源:一聚教程网
本节主要记录TcpServer这块的主要流程,H2 jdbc访问TcpServer。主要流程都在TcpServer。
TcpServer的listen()方法监听新的连接请求,接受到新连接则创建TcpServerThread对象,代表一个连接,它里面的Session、Transfer对象都和它一一对应。
TcpServerThread的process方法是主要的执行方法,一个简单的select请求会和client交互7次
1 SESSION_SET_ID 获取client传过来的session id
2 SESSION_PREPARE_READ_PARAMS 状态创建 Command
session.prepareLocal(sql) 主要工作 sql解析
Parser.parseSelectSimpleFromPart(Select)
->readTableFilter 找到用到的table,根据table创建需要的tableFilter
sql执行前的工作,返回CommandContainer
Select init() prepare()
3 COMMAND_EXECUTE_QUERY状态 调用CommandContainer的query方法,
ResultInterface result = prepared.query(maxrows);运行sql执行计划,得到结果。调到Query.query
Select为例 Select.queryWithoutCache
4 RESULT_CLOSE 释放cache中的结果对象
5 COMMAND_CLOSE 释放comand对象
6 SESSION_PREPARE_READ_PARAMS和 COMMAND_EXECUTE_UPDATE ROLLBACK回滚当前事务,清空临时表
7 SESSION_CLOSE 关闭session,停止TcpServerThread线程
与H2 JDBC的关系
当客户端通过H2 jdbc与tcpServer建立连接时,服务端跳到SESSION_SET_ID,获取session id
当客户端执行executeQuery时,对应服务端的 SESSION_PREPARE_READ_PARAMS和COMMAND_EXECUTE_QUERY
客户端conn.close()则对应SESSION_CLOSE
同一个conn做后面的executeQuery,会对应到RESULT_CLOSE和COMMAND_CLOSE来释放资源
可以看出从请求建立,query执行,到请求关闭与client有7次交互。如果是重用已有连接,每次query查询也会执行2、3、4、5四个步骤.
每次执行select 命令都会交互两次SESSION_PREPARE_READ_PARAMS和 COMMAND_EXECUTE_UPDATE,感觉比较浪费
对象关系
TcpServerThread —– 1 to 1 —– Transfer、Session
Session ——-1 to 多 ——– Command ———1 to 1——– Prepared ——– 1 to 1——– Parser
每个客户端连接TcpServerThread对应一个session id
jdbc源码主要看JdbcConnection
-
上一个: Java日期格式验证几个实例程序