Statement (2)

本文介绍了如何使用execute方法执行SQL命令,并通过getUpdateCount、getResultSet等方法处理执行结果,适用于数据库操作的学习与实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public boolean execute(String sql) throws SQLException

方法说明:execute方法可以输入任何形式的SQL命令,包括DDL与DML的SQL命令。使用execute方法执行输入的SQL命令后,如果返回值为True,表示数据库返回一个ResultSet对象或多个ResultSet 对象,此时可以利用getResultSet 与 getMoreResultSets 的方法取得ResultSet 的对象;反之如果为 false,表示数据库的执行结果并没有产生任何 ResultSet,此时就可以就利用getUpdateCount 来获得插入、修改或者删除的记录条数。

1、参数:sql ----- 任何形式的SQL命令。

2、返回值: boolean ----- 如果为 true 表示返回一个ResultSet,可以利用getResultSet 的方法来取得;反之如果为false表示返回是数据变动的条数捉者是已经没有任何结果。

3、异常: SQLException ----- 执行execute 方法时,数据库发生任何的错误,则会产生一个SQLException的对象。

4、附加:与getUpdateCount、getResultSet 及getMoreResults 方法搭配。

---------------------------------------------------------------------------------------

public int getUpdateCount() throws SQLException

方法说明:必须与execute 方法一起使用,如果execute 执行SQL命令之后的返回值为false,就可以利用 getUpdateCount 获得插入、修改或者删除的记录条数。

1、参数:无。

2、返回值: int ----- 如果execute 执行的是插入、修改或者删除语句,则返回值表示插入、修改或者删除的记录条数;如果返回的整型值为 -1,表示返回值为ResultSet 的对象或者是根本已经没有任何结果。

3、异常: SQLException ----- 数据库发生任何的错误,则会产生一个SQLException的对象。

4、附加:与execute 方法搭配。

--------------------------------------------------------------------------------------- 

public ResultSet getResultSet() throws SQLException

方法说明:必须与execute 方法一起使用,如果execute方法返回值为 true,就可以利用getResultSet 方法取得ResultSet 的对象。

1、参数:无 。

2、返回值: ResultSet ----- 如果为 true 表示目前的ResultSet 对象。如果为null 表示为结果可能是数据更动的条数捉者是已经没有任何结果。

3、异常: SQLException ----- 数据库发生任何的错误,则会产生一个SQLException的对象。

4、附加:与execute 方法搭配。

---------------------------------------------------------------------------------------

public boolean getMoreResults() throws SQLException

方法说明:使用execute方法时,可能是执行数据库上的存储过程(Store Procedure),数据库的存储过程可以返回多个ResultSet 对象,当利用getResult 取得一个ResultSet 的对象之后,我们可以执行getMoreResults() 方法来得知是否还有其他的ResultSet。如果Return值是true,表示还有其他的ResultSet,就可以利用getResultSet方法来取得另外一个ResultSet;若Return值为 false,表示已经没有其他的ResultSet。

1、参数:无 。

2、返回值: boolean ----- 如果为 true 表示下一个返回值为ResultSet对象;反之如果为false表示返回是数据变动的条数捉者是已经没有任何结果。

3、异常: SQLException ----- 数据库发生任何的错误,则会产生一个SQLException的对象。

4、附加:如何确认 execute 执行之后,已经没有任何结果呢? 如果 getMoreResults 返回 false 的话,表示已经没有任何的ResultSet 的对象,然后在使用 getUpdateCount 确认也没有任何的数据更新。所以使用下面的方式来判断: (!getMoreResults()) && (getUpdateCount()==-1)

---------------------------------------------------------------------------------------

注意,以下使用数据库sql2000,驱动jtds1.2.2 一、调用存储过程(无结果集返回) Connection connection = ConnectionHelper.getConnection(); CallableStatement callableStatement = connection.prepareCall("{ call procedureName(?,?) }"); callableStatement.setString(1, "xxxxxxxx"); callableStatement.setString(2, "xxxxxxxx"); callableStatement.execute(); //获得sql的消息并输出,这个估计很多人都需要 SQLWarning sqlWarning = callableStatement.getWarnings(); while (sqlWarning != null) { System.out.println("sqlWarning.getErrorCode() = " + sqlWarning.getErrorCode()); System.out.println("sqlWarning.getSQLState() = " + sqlWarning.getSQLState()); System.out.println("sqlWarning.getMessage() = " + sqlWarning.getMessage()); sqlWarning = sqlWarning.getNextWarning(); } //close ConnectionHelper.closeConnection(callableStatement, connection); 二、调用存储过程,返回sql类型数据(非记录集) Connection connection = ConnectionHelper.getConnection(); CallableStatement callableStatement = connection.prepareCall("{ call procedureName(?,?,?) }"); callableStatement.setString(1, "xxxxxxxx"); callableStatement.setString(2, "xxxxxxxx"); //重点是这句1 callableStatement.registerOutParameter(3, Types.INTEGER); callableStatement.execute(); //取返回结果,重点是这句2 //int rsCount = callableStatement.getInt(3); //close ConnectionHelper.closeConnection(callableStatement, connection); 三、重点来了,返回记录集,多记录集 注意,不需要注册返回结果参数,只需要在sql中select出结果即可 例如:select * from tableName 即可得到返回结果 Connection connection = ConnectionHelper.getConnection(); CallableStatement callableStatement = connection.prepareCall("{ call procedureName(?) }"); //此处参数与结果集返回没有关系 callableStatement.setString(1, "xxxxxxxx"); callableStatement.execute(); ResultSet resultSet = callableStatement.getResultSet(); //以上两个语句,可以使用ResultSet resultSet = callableStatement.executeQuery();替代 //多结果返回 ResultSet resultSet2; if (callableStatement.getMoreResults()) { resultSet2 = callableStatement.getResultSet(); while (resultSet2.next()) { } } //close ConnectionHelper.closeConnection(callableStatement, connection); 提示:多结果返回可以使用如下代码(以上主要让大家明白,单一结果和多结果的区别): Boolean hasMoreResult = true; while (hasMoreResult) { ResultSet resultSet = callableStatement.getResultSet(); while (resultSet.next()) { } hasMoreResult = callableStatement.getMoreResults(); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值