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

我想知道是否可能使用JDBC执行类似这样的东西。

"SELECT FROM * TABLE;INSERT INTO TABLE;"

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

>通过设置数据库连接属性以允许多个查询,

默认情况下以分号分隔。

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

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

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

在发送连接请求时,您需要向数据库URL附加一个连接属性allowMultiQueries = true。这是附加的连接属性,如果已经存在一些连接属性,例如autoReConnect = true等。allowMultiQueries属性的可接受值为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查询创建过程。

>使用CallableStatement从java调用它。

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

无法捕获DML结果,但可以发出另一个选择

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

样品表和程序:

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、付费专栏及课程。

余额充值