java中查询所有语句_在单语句中在java中执行多个查询

我想知道是否有可能使用JDBC执行这样的事情。

"SELECT FROM * TABLE;INSERT INTO TABLE;"

是的,这是可能的。 据我所知,有两种方法。 他们是

通过将数据库连接属性设置为允许多个查询,默认情况下用分号分隔。

通过调用隐式返回游标的存储过程。

以下示例说明了上述两种可能性。

示例1 :(允许多个查询):

在发送连接请求时,您需要将连接属性allowMultiQueries=true附加到数据库url。 这是额外的连接属性,如果已经存在一些,如autoReConnect=true等autoReConnect=true属性的可接受值是true , false , yes和no 。 任何其他值在运行时被SQLException拒绝。

String dbUrl = "jdbc:mysql:///test?allowMultiQueries=true";

除非这样的指令被通过,否则SQLException 。

您必须使用execute( String sql )或其他变体来获取查询执行的结果。

boolean hasMoreResultSets = stmt.execute( multiQuerySqlString );

要遍历并处理结果,需要执行以下步骤:

READING_QUERY_RESULTS: // label while ( hasMoreResultSets || stmt.getUpdateCount() != -1 ) { if ( hasMoreResultSets ) { Resultset rs = stmt.getResultSet(); // handle your rs here } // if has rs else { // if ddl/dml/... int queryResult = stmt.getUpdateCount(); if ( queryResult == -1 ) { // no more queries processed break READING_QUERY_RESULTS; } // no more queries processed // handle success, failure, generated keys, etc here } // if ddl/dml/... // check to continue in the loop hasMoreResultSets = stmt.getMoreResults(); } // while results

示例2 :遵循的步骤:

用一个或多个select和DML查询创build一个过程。

使用CallableStatement从java调用它。

您可以捕获在过程中执行的多个ResultSet 。

DML结果不能被捕获,但可以发出另一个select

以查找表中的行如何受到影响。

示例表和过程 :

mysql> create table tbl_mq( i int not null auto_increment, name varchar(10), primary key (i) ); Query OK, 0 rows affected (0.16 sec) mysql> delimiter // mysql> create procedure multi_query() -> begin -> select count(*) as name_count from tbl_mq; -> insert into tbl_mq( names ) values ( 'ravi' ); -> select last_insert_id(); -> select * from tbl_mq; -> end; -> // Query OK, 0 rows affected (0.02 sec) mysql> delimiter ; mysql> call multi_query(); +------------+ | name_count | +------------+ | 0 | +------------+ 1 row in set (0.00 sec) +------------------+ | last_insert_id() | +------------------+ | 3 | +------------------+ 1 row in set (0.00 sec) +---+------+ | i | name | +---+------+ | 1 | ravi | +---+------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec)

从Java调用过程 :

CallableStatement cstmt = con.prepareCall( "call multi_query()" ); boolean hasMoreResultSets = cstmt.execute(); READING_QUERY_RESULTS: while ( hasMoreResultSets ) { Resultset rs = stmt.getResultSet(); // handle your rs here } // while has more rs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值