mysql 驱动指令_Mysql的驱动包如何发送指令给MYSQL SERVER
最近看mysql提供的支持java语言的驱动包底层实现,我对于mysql不了解,所以现在卡在了驱动包在向mysql server调用rollback、commit以及其他的操作时候是如何被mysql server接受得到指令,当然具体指令我也不清楚,但是大概了解类似于oracle的undo回滚一样,我是这么想的!今天在iteye主要是询问以下问题?
1.mysql server如何接受client端的指令
2.比如rollback操作,指令长啥样?
3.mysql server接受指令后,后续操作实现(宽泛点亦可,讲深篇幅不够,兴许还看不懂)
以下我是在看mysql底层包所查到的相关代码
public QueryResult executeQuery(final Query dQuery) throws QueryException {
log.finest("Executing streamed query: " + dQuery);
this.hasMoreResults = false;
final StreamedQueryPacket packet = new StreamedQueryPacket(dQuery);
try {
// make sure we are in a good state
packetFetcher.clearInputStream();
packet.send(writer);
} catch (IOException e) {
throw new QueryException("Could not send query: " + e.getMessage(),
-1,
SQLExceptionMapper.SQLStates.CONNECTION_EXCEPTION.getSqlState(),
e);
}
final RawPacket rawPacket;
final ResultPacket resultPacket;
try {
rawPacket = packetFetcher.getRawPacket();
resultPacket = ResultPacketFactory.createResultPacket(rawPacket);
} catch (IOException e) {
throw new QueryException("Could not read resultset: " + e.getMessage(),
-1,
SQLExceptionMapper.SQLStates.CONNECTION_EXCEPTION.getSqlState(),
e);
}
switch (resultPacket.getResultType()) {
case ERROR:
final ErrorPacket ep = (ErrorPacket) resultPacket;
checkIfCancelled();
log.warning("Could not execute query " + dQuery + ": " + ((ErrorPacket) resultPacket).getMessage());
throw new QueryException(ep.getMessage(),
ep.getErrorNumber(),
ep.getSqlState());
case OK:
final OKPacket okpacket = (OKPacket) resultPacket;
this.hasMoreResults = okpacket.getServerStatus().contains(ServerStatus.MORE_RESULTS_EXISTS);
final QueryResult updateResult = new DrizzleUpdateResult(okpacket.getAffectedRows(),
okpacket.getWarnings(),
okpacket.getMessage(),
okpacket.getInsertId());
log.fine("OK, " + okpacket.getAffectedRows());
return updateResult;
case RESULTSET:
log.fine("SELECT executed, fetching result set");
try {
return this.createDrizzleQueryResult((ResultSetPacket) resultPacket);
} catch (IOException e) {
throw new QueryException("Could not read result set: " + e.getMessage(),
-1,
SQLExceptionMapper.SQLStates.CONNECTION_EXCEPTION.getSqlState(),
e);
}
default:
log.severe("Could not parse result..." + resultPacket.getResultType());
throw new QueryException("Could not parse result", (short) -1, SQLExceptionMapper.SQLStates.INTERRUPTED_EXCEPTION.getSqlState());
}
}
public int send(final OutputStream ostream) throws IOException,
QueryException
{
if (query.length() > MAX_PACKET_LENGTH - HEADER_LENGTH)
{
// Query can not be sent on only one network packet
return sendSplittedQuery(ostream);
}
else
{
byte[] byteHeader = Utils.copyWithLength(
intToByteArray( query.length() + 1), 5);
byteHeader[3] = (byte) 0;
byteHeader[4] = (byte) 0x03;
ostream.write(byteHeader);
query.writeTo(ostream);
ostream.flush();
return 0;
}
}
private int sendSplittedQuery(OutputStream ostream) throws QueryException,
IOException
{
int remainingBytes = query.length();
int offset = 0;
int packetIndex = 0;
while (remainingBytes >= 0L)
{
int packLength = Math.min(remainingBytes, MAX_PACKET_LENGTH);
byte[] byteHeader = null;
if (packetIndex == 0)
{
byteHeader = Utils.copyWithLength(intToByteArray(packLength), 5);
// Add the command byte
byteHeader[4] = (byte) 0x03;
// And remove 1 byte from available data length
packLength -= 1;
}
else
{
byteHeader = Utils.copyWithLength(intToByteArray(packLength), 4);
}
byteHeader[3] = (byte) packetIndex;
if(log.isLoggable(Level.FINEST)) {
log.finest("Sending packet " + packetIndex + " with length = "
+ packLength + " / " + remainingBytes);
}
ostream.write(byteHeader);
if(log.isLoggable(Level.FINEST)) {
log.finest("Header is " + MySQLProtocol.hexdump(byteHeader, 0));
}
if (packLength > 0)
{
query.writeTo(ostream, offset, packLength);
}
ostream.flush();
if (remainingBytes >= MAX_PACKET_LENGTH)
{
remainingBytes -= packLength;
offset += packLength;
packetIndex++;
}
else
remainingBytes = -1;
}
return packetIndex;
}
2014年4月23日 15:18
mysql 驱动指令_Mysql的驱动包如何发送指令给MYSQL SERVER相关推荐
- linux mysql odbc驱动安装_MySQL ODBC 驱动安装
阅读目录 一.在线安装 1.yum在线安装驱动 2.配置驱动 3.测试连接 二.编译安装 1.MySQL创建测试用户和测试库 2.安装驱动 3.配置驱动 4.测试 一.在线安装 1.yum在线安装驱动 ...
- 二进制安装的mysql怎么卸载_mysql安装-----二进制包安装及卸载
1. 首先准备好二进制安装包 mysql-advanced-5.6.25-linux-glibc2.5-x86_64.tar.gz 2. 进行安装 shell> groupadd mysql s ...
- lepus mysql 复制监控_MySQL数据库之CentOS搭建lepus3.8监控MySQL
本文主要向大家介绍了MySQL数据库之CentOS搭建lepus3.8监控MySQL ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. LNMP环境 yum -y install ...
- 0基础能学mysql数据库吗_mysql学习入门:零基础如何使用mysql创建数据库表?
零基础如何自学Mysql创建数据库,是Mysql学习者必经之路,Mysql是受欢迎的关系数据库管理系统,WEB应用方面MySQL是很好的RDBMS应用软件之一.如何使用Mysql创建数据库表,打开My ...
- mysql 闪回_MySQL数据误删除的快速解决方法(MySQL闪回工具)
概述 Binlog2sql是一个Python开发开源的MySQL Binlog解析工具,能够将Binlog解析为原始的SQL,也支持将Binlog解析为回滚的SQL,去除主键的INSERT SQL,是 ...
- jdbc版本低MySQL版本高_Mysql JDBC驱动版本与Mysql版本的对应问题解决
好长时间不用Mysql了, 昨天朋友有一个小项目在我的机器上跑的一点问题都没有, 到他的机器上却是报服务器内部错误(500), 用QQ上远程协助(太慢 好长时间不用Mysql了, 昨天朋友有一个小项目 ...
- linux mysql odbc驱动安装_mysql odb驱动_Mysql的odbc driver安装配置(Linux)
一.下载与安装 下载地址(tar.gz):https://dev.mysql.com/downloads/connector/odbc/ 安装: #tar -zxvf mysql-connector- ...
- 武汉mysql ocp考点_MySQL OCP考试复习系列–开篇:了解MySQL考试
MySQL OCP考试复习系列–开篇:了解MySQL考试 嗯,那个决定去考MySQL OCP了,事实上最近工作一直围绕着DB2,MySQL要去考的话需要好好的复习的啊. 150分钟,100道多选,答对 ...
- mysql dba管理_Mysql DBA 高级运维学习之路-mysql数据库常用管理应用
1.创建数据库 命令语法:create database 注意库名不能数字开头 (1)创建linzhongniao库 mysql> create database linzhongniao; Q ...
- mysql 密码大小写_MySQL数据库加密和解密~认证登陆密码(mysql.user)和MySQL不区分大小写...
MySQL数据库认证密码有两种方式: 1:MySQL 4.1版本之前是MySQL323加密 2:MySQL 4.1和之后的版本都是MySQLSHA1加密 还有函数:AES_ENCRYPT()加密函数和 ...
最新文章
- springMVC对异常处理的支持
- 解决ssm项目表单数据提交到数据库乱码问题
- C语言 泛型链表 如何计算(结构体中各元素)相对内存地址?(字节对齐,结构体对齐)offsetof()函数 ( (struct X*)0 ) -> Y)语法(匿名结构体)
- windows远程桌面超出最大连接数强制登录命令
- Seize Operation Master
- Java Socket编程中使用ObjectOutputStream 和 ObjectInputStream 出现问题
- 设计模式--观察者模式--Java实现
- 蓝桥杯 ALGO-12 算法训练 幂方分解
- DJ 算法的队列优先优化
- 中断按键c语言程序设计,C语言程序设计:INT0及INT1中断计数
- 用Python绘制折线图(下)
- ppt流程图箭头分叉_职场PPT实战:流程图只能箭头方框?设计师教你新思路
- Scrapy爬虫以及Scrapyd爬虫部署
- html图片轮播代码 贴吧,JS实现简易图片轮播效果的方法
- QLabel setText 标红 加粗
- 微信自定义分享功能实现
- Could not start on port 1099 3837
- ffmpeg 实现音频aac编码
- 生成器进阶--yield from
- About Garbage Collector and finilize()