execute、executeQuery和executeUpdate之间的区别

来源:互联网 发布:铁通和广电网络哪个好 编辑:程序博客网 时间:2024/06/05 05:20

JDBCTM中Statement接口提供的execute、executeQuery和executeUpdate之间的区别

Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。使用哪一个方法由 SQL 语句所产生的内容决定。 

ResultSet executeQuery(String sql) throws SQLException执行给定的 SQL 语句,该语句返回单个 ResultSet 对象,sql - 要发送给数据库的 SQL 语句,通常为静态 SQL SELECT 语句
方法executeQuery
用于产生单个结果集的语句,例如 SELECT 语句。 被使用最多的执行 SQL 语句的方法是 executeQuery。这个方法被用来执行 SELECT 语句,它几乎是使用最多的 SQL 语句。

boolean flag =false;         String id= s.getId();         String name = s.getName();         int age = s.getAge();         String sex = s.getSex();             try {                 Connection conn = DriverManager.getConnection(url,user,password);                 String sql = "select * from user where id=?;";                 PreparedStatement p = conn.prepareStatement(sql);                 p.setString(1, id);                 ResultSet rs = p.executeQuery();                  while(rs.next()){                        String name1 = rs.getString("name");                        int age1 = rs.getInt(3);                        String sex1 = rs.getString("sex");                        if(name1.equals(name)&&age1==age&&sex1.equals(sex)){                            flag = true;                         }                    }                 conn.close();             } catch (SQLException e) {                 e.printStackTrace();             }        return flag;    }

int executeUpdate(String sql)throws SQLException

 方法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 用于更新表的时间更多,因为表只需要创建一次,但经常被更新。 
         String name = s.getName();         int age = s.getAge();         String sex = s.getSex(); try {                 Connection conn = DriverManager.getConnection(url,user,password);                 String sql = "insert into user (id,name,age,sex) values(?,?,?,?);";                 PreparedStatement p = conn.prepareStatement(sql);                 p.setString(1, id);                 p.setString(2, name);                 p.setInt(3,age);                 p.setString(4, sex);                 p.executeUpdate();                 conn.close();             } catch (SQLException e) {                 e.printStackTrace();             }

方法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 表示没有其它结果。也就是说,当下列条件为真时表示没有结果(或没有其它结果):

补充:

  1. DDL 定义:数据库定义语言
    用于定义数据库的三级结构,包括外模式、概念模式、内模式及其相互之间的映像,定义数据的完整性、安全控制等约束,用于操作对象和对象的属性
    DDL的主要语句(操作)
    Create语句:可以创建数据库和数据库的一些对象。
    Drop语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。
    Alter语句:修改数据表定义及属性。
  2. DML 定义:数据操纵语言 用于操作数据库对象中包含的数据,也就是说操作的单位是记录。
    数据操纵分成数据查询和数据更新两类。数据更新又分成插入、删除、和修改三种操作。
    DML的主要语句(操作)
    Select语句:查询符合指定条件的记录
    Insert语句:向数据表张插入一条记录。
    Delete语句:删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是,它的操作对象仍是记录。
    Update语句:用于修改已存在表中的记录的内容。
  3. DCL 定义:数据库控制语言 操作是数据库对象的权限,这些操作的确定使数据更加的安全。
    Grant语句:允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。
    Revoke语句:可以废除某用户或某组或所有用户访问权限
  4. .TCL 定义:事务控制语言
    DCL的操作对象(用户),此时的用户指的是数据库用户。
    SAVEPOINT 设置保存点
    ROLLBACK 回滚
    SET TRANSACTION
原创粉丝点击