`
包涵
  • 浏览: 37775 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

执行sql语句的方法

    博客分类:
  • sql
sql 
阅读更多
Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。使用哪一个方法由 SQL 语句所产生的内容决定。

         方法executeQuery
         用于产生单个结果集的语句,例如 SELECT 语句。 被使用最多的执行 SQL 语句的方法是 executeQuery。这个方法被用来执行 SELECT 语句,它几乎是使用最多的 SQL 语句。

         方法executeUpdate
         用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。

         使用executeUpdate方法是因为在 createTableCoffees 中的 SQL 语句是 DDL (数据定义语言)语句。创建表,改变表,删除表都是 DDL 语句的例子,要用 executeUpdate 方法来执行。你也可以从它的名字里看出,方法 executeUpdate 也被用于执行更新表 SQL 语句。实际上,相对于创建表来说,executeUpdate 用于更新表的时间更多,因为表只需要创建一次,但经常被更新。




         方法execute:
         用于执行返回多个结果集、多个更新计数或二者组合的语句。因为多数程序员不会需要该高级功能

         execute方法应该仅在语句能返回多个ResultSet对象、多个更新计数或ResultSet对象与更新计数的组合时使用。当执行某个已存储过程或动态执行未知 SQL 字符串(即应用程序程序员在编译时未知)时,有可能出现多个结果的情况,尽管这种情况很少见。
         因为方法 execute 处理非常规情况,所以获取其结果需要一些特殊处理并不足为怪。例如,假定已知某个过程返回两个结果集,则在使用方法 execute 执行该过程后,必须调用方法 getResultSet 获得第一个结果集,然后调用适当的 getXXX 方法获取其中的值。要获得第二个结果集,需要先调用 getMoreResults 方法,然后再调用 getResultSet 方法。如果已知某个过程返回两个更新计数,则首先调用方法 getUpdateCount,然后调用 getMoreResults,并再次调用 getUpdateCount。
         对于不知道返回内容,则情况更为复杂。如果结果是 ResultSet 对象,则方法 execute 返回 true;如果结果是 Java int,则返回 false。如果返回 int,则意味着结果是更新计数或执行的语句是 DDL 命令。在调用方法 execute 之后要做的第一件事情是调用 getResultSet 或 getUpdateCount。调用方法 getResultSet 可以获得两个或多个 ResultSet 对象中第一个对象;或调用方法 getUpdateCount 可以获得两个或多个更新计数中第一个更新计数的内容。
         当 SQL 语句的结果不是结果集时,则方法 getResultSet 将返回 null。这可能意味着结果是一个更新计数或没有其它结果。在这种情况下,判断 null 真正含义的唯一方法是调用方法 getUpdateCount,它将返回一个整数。这个整数为调用语句所影响的行数;如果为 -1 则表示结果是结果集或没有结果。如果方法 getResultSet 已返回 null(表示结果不是 ResultSet 对象),则返回值 -1 表示没有其它结果。也就是说,当下列条件为真时表示没有结果(或没有其它结果):

((stmt.getResultSet() == null) && (stmt.getUpdateCount() == -1))

         如果已经调用方法 getResultSet 并处理了它返回的 ResultSet 对象,则有必要调用方法 getMoreResults 以确定是否有其它结果集或更新计数。如果 getMoreResults 返回 true,则需要再次调用 getResultSet 来检索下一个结果集。如上所述,如果 getResultSet 返回 null,则需要调用 getUpdateCount 来检查 null 是表示结果为更新计数还是表示没有其它结果。

         当 getMoreResults 返回 false 时,它表示该 SQL 语句返回一个更新计数或没有其它结果。因此需要调用方法 getUpdateCount 来检查它是哪一种情况。在这种情况下,当下列条件为真时表示没有其它结果:

((stmt.getMoreResults() == false) && (stmt.getUpdateCount() == -1))

         下面的代码演示了一种方法用来确认已访问调用方法 execute 所产生的全部结果集和更新计数:


stmt.execute(queryStringWithUnknownResults);
while (true) {
int rowCount = stmt.getUpdateCount();
if (rowCount > 0) { // 它是更新计数
System.out.println("Rows changed = " + count);
stmt.getMoreResults();
continue;
}
if (rowCount == 0) { // DDL 命令或 0 个更新
System.out.println(" No rows changed or statement was DDL
command");
stmt.getMoreResults();
continue;
}

// 执行到这里,证明有一个结果集
// 或没有其它结果

ResultSet rs = stmt.getResultSet;
if (rs != null) {
. . . // 使用元数据获得关于结果集列的信息
while (rs.next()) {
. . . // 处理结果
stmt.getMoreResults();
continue;
}
break; // 没有其它结果
分享到:
评论
1 楼 yuanq_20 2012-05-06  
http://db.tt/IPnthSo3
分享好用的dropbox,保证资源不会丢失!

相关推荐

    java执行SQL语句实现查询的通用方法详解

    "java执行SQL语句实现查询的通用方法详解" 本文主要介绍了java执行SQL语句实现查询的通用方法详解,具有一定借鉴价值,需要的朋友可以参考下。 一、Java执行SQL语句实现查询的通用方法详解 在Java中执行SQL语句...

    hibernate执行原生sql语句

    "hibernate执行原生sql语句" Hibernate 是一种流行的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。然而,在一些情况下,我们需要直接执行原生 SQL 语句,而不是使用 Hibernate 的...

    mybatis直接执行sql语句后续之一

    这篇博客“mybatis直接执行sql语句后续之一”可能探讨了如何在MyBatis中高效且有效地执行SQL操作。下面我们将深入探讨MyBatis的SQL执行机制及相关知识点。 首先,MyBatis的核心组件是SqlSessionFactory,它是创建...

    存储过程中怎么动态执行sql语句

    ### 动态执行SQL语句在Oracle中的应用 #### 标题解读 “存储过程中怎么动态执行SQL语句”这一标题表明文章将介绍如何在Oracle数据库的存储过程中编写能够动态执行的SQL语句。动态SQL是指在运行时才能确定其具体内容...

    oracle监听执行sql语句

    #### 二、监听执行SQL语句的基本方法 1. **使用`v$session`和`v$sqlarea`视图** ```sql SELECT a.username, a.sid, b.SQL_TEXT, b.SQL_FULLTEXT FROM v$session a, v$sqlarea b WHERE a.sql_address = b....

    Mybatis执行SQL语句的方式

    在上面的代码中,我们使用 SqlSession 对象来执行 SQL 语句,我们可以使用 getMapper 方法来获取 Mapper 接口的实例,然后使用该实例来执行 SQL 语句。我们也可以使用 selectOne 方法和 selectList 方法来执行 SQL ...

    java定时执行sql语句

    通过配置数据库连接信息和要执行的sql语句,可实现定时执行多个sql语句。 所要执行的语句只能是写死的,可支持sqlserver mysql oracle。 配置说明: config/sys.properties 中指定数据库类型及连接信息,执行间隔...

    SQL Server 2005 定时执行SQL语句的方法

    SQL SERVER 2005有定时任务,你可以启动一下。不过要想更加直观的控制,直接写一个程序,定时执行你的存储过程...“步骤” — 设置步骤名称 — “类型”T-SQL — 选择数据库 — “命令”输入SQL语句 “计划” — “新建

    oracle利用批处理文件执行SQL语句,bat连接oracle数据库并执行语句

    批处理文件(如.bat文件)在Windows环境中是一种高效的方式,可以自动化执行一系列命令,包括连接数据库和执行SQL语句。在这个场景中,我们可以利用批处理文件来简化Oracle数据库的操作,如删除用户、创建用户、创建...

    解决python 执行sql语句时所传参数含有单引号的问题

    在Python编程中,当我们需要执行SQL语句时,有时会遇到参数中包含单引号(')的情况,这可能导致SQL语法错误。在描述的问题中,作者在尝试插入数据到`teacher`表时遇到了编程错误,因为`t_info`字段的值`result2`...

    BAT文件执行SQL语句

    总之,使用BAT文件执行SQL语句是一种高效且实用的方法,尤其适用于服务器管理和自动化操作。通过掌握这种方法,可以提高工作效率,减少手动操作的时间和错误。在实际应用中,记得对敏感信息(如用户名和密码)进行...

    oracle 查看当前会话执行的sql语句

    以下将详细介绍如何通过不同的方法来查看当前会话所执行的SQL语句及相关信息。 #### 1. 获取当前会话的信息 首先,我们可以通过`v$session`视图来获取当前会话的基本信息,如SID、SERIAL#等。 ```sql -- 查询当前...

    连接sqlserver数据库,批量执行sql语句

    在本案例中,我们关注的是使用VC++和MFC(Microsoft Foundation Classes)库连接到SQL Server数据库并批量执行SQL语句的过程。下面将详细介绍这个过程涉及的关键知识点。 首先,`VC++`是微软开发的一款集成开发环境...

    如何获得PreparedStatement最终执行的sql语句

    这些驱动在执行`executeUpdate`或`executeQuery`方法时,会将预编译的SQL和参数结合成最终的SQL语句。 然而,这通常涉及到对JDBC驱动的源代码分析,因为标准的JDBC API并不直接提供这样的功能。一种可能的方法是...

    批处理执行sql语句

    在这个“批处理执行sql语句”示例中,我们可以深入理解批处理的运用。 首先,`升级数据库批处理.bat` 是一个批处理文件,通常扩展名为 .bat 的文件是Windows操作系统中的批处理脚本,用于执行一系列命令。在这个...

    Web页面执行SQL语句.rar

    这个压缩包文件提供了一种通过Web界面与数据库交互的方法,使得用户可以在网页上直接执行SQL语句进行数据操作。 1. **Web开发**:这里涉及到的是基于Web的应用程序开发,通常使用HTML、CSS和JavaScript构建前端界面...

    NC后台sql语句执行的方式

    综上所述,NC后台提供了多种执行SQL语句的方法,包括通过`BaseDAO`执行、利用`NCLocator`和`IUAPQueryBS`接口执行以及特定业务场景下的执行方式。这些方法各有特点,适用于不同的场景。开发者可以根据实际需求选择...

    access 一次执行多条sql语句

    4. **执行SQL语句**: 使用`OleDbCommand`对象设置SQL语句并执行。在这个例子中,第一条SQL语句是更新账户登录次数,第二条SQL语句是调用存储过程来增加软件的日志数量。 5. **提交或回滚事务**: 如果没有异常发生,...

    完成超长SQL语句执行前拆分

    ### 完成超长SQL语句执行前拆分 #### 概述 在使用Visual Basic (简称VB)进行数据库操作时,可能会遇到因为SQL语句过...通过这种方法,可以轻松地避免由于SQL语句过长而导致的执行错误,从而提高程序的稳定性和可靠性。

Global site tag (gtag.js) - Google Analytics