Jdbc查询设置 allowMultiQueries为true/false时底层源码探究发现的一个问题咨询

zgw06629 发布于 2015/05/07 16:27
阅读 5K+
收藏 0

Jdbc Url 中设置allowMultiQueries=true时,可以允许一次执行多条sql(通过分号分割),如下所示:

String url = "jdbc:mysql://localhost:3306?allowMultiQueries=true";
String sql = "select 'hello';select 'world'";
stmt.execute(sql);

否则就会报错.

当调试源代码想找出 allowMultiQueries=true/false时到底哪里有不同,发现当执行完下面的语句后,

//所属:void java.net.SocketOutputStream.socketWrite(byte[] b, int off, int len)
socketWrite0(fd, b, off, len);

会有不同的结果.

若设置为true,mysql query log中能看到如下的SQL输出:

23 Query	select 'hello';
23 Query	select 'world'

若设置为false的话,就没有上述sql输出.

奇怪的是这两种情况下参数都一样,结果却不同. 不知何故,可有人知晓?

加载中
0
zgw06629
zgw06629

见博客:http://my.oschina.net/zhuguowei/blog/411853

南湖船老大
南湖船老大
这个已经回答的很清楚了。总结下,就是multiquery就是个mysql对外提供的连接api里的一个参数。有些语言或客户端实现是写死的,硬编码的,没法改,改了也没效。
返回顶部
顶部