java 执行查询_用java在单个语句中执行的多个查询

我想知道是否可以使用JDBC执行类似的操作。"SELECT FROM * TABLE;INSERT INTO TABLE;"

是的是有可能的。据我所知,有两种方法。他们是通过将数据库连接属性设置为允许多个查询,默认情况下以分号分隔.

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

下面的例子演示了上述两种可能性。

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

在发送连接请求时,需要追加连接属性。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查询。

从java调用

CallableStatement.

您可以捕获多个

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

余额充值