execute、executeQuery和executeUpdate之间的区别
- 格式:doc
- 大小:31.50 KB
- 文档页数:3
preparedstatement方法PreparedStatement 方法:PreparedStatement 是 Statement的子接口,它是用来执行预编译的 SQL 语句的,并提供了许多比 Statement 更丰富和灵活的操作,从而使得数据库的开发和维护工作更加简单、高效。
PreparedStatement 提供了各种方法供开发人员调用,如添加参数、取得结果集的值等,下面将详细介绍 PreparedStatement 常用的方法。
1. 参数设置PreparedStatement 接口提供了一组用来设置参数的方法,针对不同的数据类型,有几种重载的方法,也可以将 Object类作为设置参数的类型,由数据库驱动程序确定具体的参数类型和转换。
它们分别是:tvoid setBoolean(int parameterIndex, boolean x)tvoid setByte(int parameterIndex, byte x)tvoid setShort(int parameterIndex, short x)tvoid setInt(int parameterIndex, int x)tvoid setLong(int parameterIndex, long x)tvoid setFloat(int parameterIndex, float x)tvoid setDouble(int parameterIndex, double x)tvoid setBigDecimal(int parameterIndex, BigDecimal x) tvoid setString(int parameterIndex, String x)tvoid setBytes(int parameterIndex, byte x[])tvoid setDate(int parameterIndex, Date x)tvoid setTime(int parameterIndex, Time x)tvoid setTimestamp(int parameterIndex, Timestamp x)tvoid setObject(int parameterIndex, Object x)2. 执行查询语句有两种方法可以执行 PreparedStatement 对象,它们是executeQuery()、executeUpdate() 和 execute(),它们分别用于执行 SELECT、INSERT、UPDATE 和 DELETE 等语句。
2018年10月高等教育自学考试互联网数据库真题(总分100, 做题时间150分钟)单项选择题1.数据的存储结构与数据的逻辑结构之间的独立性称为数据的SSS_SINGLE_SELA结构独立性B物理独立性C逻辑独立性D分布独立性分值: 2答案:B2.数据模型的三个要素中,用于描述系统静态特性的是SSS_SINGLE_SELA数据操作B数据参照C数据完整性约束D数据结构分值: 2答案:D3.根据关系模型的完整性规则,一个关系中的主属性SSS_SINGLE_SELA不能有两个B不能成为另一个关系的外码C不能取空值D可以取空值分值: 2答案:C4.设有关系模式R(A,B,C)和S(B,C,D,E),下列关系代数表达式运算出现错误的是SSS_SINGLE_SELARUSBΠB (R)UΠB(S)CR×SD分值: 2答案:A5.在关系模式 R(U,F) 中,如果X→ Y,并且不存在 X 的真子集 X1,使X1→Y,称函数依赖X→Y为SSS_SINGLE_SELA平凡函数依赖B部分函数依赖C完全函数依赖D传递函数依赖分值: 2答案:C6.下列不属于数据库系统必须提供的数据库保护功能的是SSS_SINGLE_SELA安全性B可移植性C完整性D并发控制分值: 2答案:B7.下列关于 ISAPI 的描述中,错误的是SSS_SINGLE_SELAISAPI 是微软提供的面向 Internet 服务的 API 接口BISAPI 与 ASP无关CISAPI 提供了 CCI 的全部功能DISAPI 比 CGI的效率高的多分值: 2答案:B8.ADO中可更新记录且能看到其他用户更新记录集的游标称为SSS_SINGLE_SELA动态游标B关键集游标静态游标D向前浏览游标分值: 2答案:A9.JDBC包含多个类,其中 Java. sql ,DriverManager 类属于SSS_SINGLE_SELAJava JDBC 类BJava JDBC 接口类CJava JDBC 异常类DJava JDBC 控制类分值: 2答案:A10.关于 VBScript 的过程,下列叙述正确的是SSS_SINGLE_SELASub过程和 Function 过程均无返回值BSub过程无返回值, Function 过程有返回值CSub过程有返回值, Function 过程无返回值DSub过程和 Function 过程均有返回值分值: 2答案:B11.Sybase ACA 结构的核心是SSS_SINGLE_SELAdaptive ServerBSybase ManagerCDB2DOracle分值: 2答案:A12.OODBS的含义是SSS_SINGLE_SELA对象关系数据库系统B面向对象数据库系统C数据库管理系统D分布式数据库系统分值: 2答案:B13.并行数据库中,可扩充性和可用性占优势的是SSS_SINGLE_SELASD结构BSM结构CSN 结构D无法比较分值: 2答案:C14.下列不属于数据分布方式的是SSS_SINGLE_SELA划分式B全重复式C部分重复式D集中式分值: 2答案:D15.下列属于 OLAP的数据组织模式的是SSS_SINGLE_SELADOLAPBMOLAPCROLAPDNOLAP分值: 2答案:C填空题16.数据管理经历了三个发展阶段:人工管理阶段、文件系统阶段和 ________阶段。
这些JDBC API的组成结构如图13-2所示。
图13-2 JDBC API的组成结构DriverManagerDriverManager类是Java.sql包中用于数据库驱动程序管理的类,作用于用户和驱动程序之间。
它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接,也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务。
DriverManager 类直接继承自ng.object,其主要成员方法如表13-2所示。
表13-2 DriverManager的主要成员方法及其含义对于简单的应用程序,程序开发人员需要在此类中直接使用的惟一方法是DriverManager.getConnection。
该方法是用来建立与数据库的连接的。
JDBC 允许用户调用DriverManager 的方法getDriver、getDrivers 和registerDriver 及Driver 的方法connect。
但多数情况下,最好让DriverManager 类管理建立连接的细节。
ConnectionConnection是用来表示数据库连接的对象,对数据库的一切操作都是在这个连接的基础上进行的。
Connection类的主要成员方法如表13-3所示。
从表13-8中可以看出,ResultSet类不仅提供了一套用于访问数据的get方法,还提供了很多移动指针(cursor,有时也译为光标)的方法。
cursor 是ResultSet 维护的指向当前数据行的指针。
最初它位于第一行之前,因此第一次访问结果集时通常调用next方法将指针置于第一行上,使它成为当前行。
随后每次调用next 指针向下移动一行。
JDBC题库⼀、填空题1. JDBC ,是⼀种⽤于执⾏SQL语句的Java API,为多种关系数据库提供统⼀访问。
它由⼀组⽤Java语⾔编写的类和接⼝组成。
2. JDBC API:供程序员调⽤的接⼝与类,集成在java.sql和 javax.sql包中。
3. 简单地说,JDBC 可做三件事:与数据库建⽴连接、发送操作数据库的语句、处理结果。
4. 加载JDBC驱动是通过调⽤⽅法 ng.Class.forName() 实现的。
5. JDBC中与数据库建⽴连接是通过调⽤ DriverManager类的静态⽅法 getConnection(url,user,password) 实现的。
6. 有三种 Statement对象:Statement、 preparedStatemen 、CallableStatement(从PreparedStatement 继承)。
7. ResultSet 对象是executeQuery()⽅法的返回值,它被称为结果集,它代表符合SQL语句条件的所有⾏,并且它通过⼀套getXXX⽅法(这些get⽅法可以访问当前⾏中的不同列)提供了对这些⾏中数据的访问。
8. ResultSet对象⾃动维护指向当前数据⾏的游标。
每调⽤⼀次 next() ⽅法,游标向下移动⼀⾏。
9. 在JDBC中,事务操作成功后,系统将⾃动调⽤ commit() 提交,否则调⽤rollback()回滚。
10. 在JDBC中,事务操作⽅法都位于接⼝java.sql.Connection中。
可以通过调⽤ setAutoCommit(false) 来禁⽌⾃动提交。
11. JDBC中,事务开始的边界不是那么明显,它会开始于组成当前事务的所有 statement 中的第⼀个被执⾏的时候。
⼆、选择题1.以下选项中有关Connection描述错误的是(D)(选择⼀项)A.Connection是Java程序与数据库建⽴的连接对象,这个对象只能⽤来连接数据库,不能执⾏SQL语句。
java.sql.PreparedStatement是Java 中用于执行SQL 语句的一个接口。
它提供了一种执行参数化SQL 语句的方法,从而提高了执行SQL 语句的安全性,并能够提高执行SQL 语句的效率。
以下是一些常用的java.sql.PreparedStatement方法:setString(int parameterIndex, String value): 设置指定参数的字符串值。
setInt(int parameterIndex, int value): 设置指定参数的整数值。
setDouble(int parameterIndex, double value): 设置指定参数的双精度浮点值。
setBoolean(int parameterIndex, boolean value): 设置指定参数的布尔值。
setFloat(int parameterIndex, float value): 设置指定参数的浮点值。
setLong(int parameterIndex, long value): 设置指定参数的长整数值。
setShort(int parameterIndex, short value): 设置指定参数的短整数值。
setByte(int parameterIndex, byte value): 设置指定参数的字节值。
setNull(int parameterIndex, int sqlType): 设置指定参数的SQL 类型为NULL。
executeQuery(): 执行查询,返回一个ResultSet对象。
executeUpdate(): 执行更新操作(如INSERT、UPDATE 或DELETE),返回受影响的行数。
execute(): 执行任意SQL 语句,返回一个布尔值,表示是否返回结果集。
getResultSet(): 获取上一个查询的结果集。
getUpdateCount(): 获取上一个更新操作受影响的行数。
JSP 预处理语句的优点预处理语句具有两个主要的优点:●查询只需要被解析(或准备)一次,但可以使用相同或不同的参数执行多次。
当查询准备好(Prepared)之后,数据库就会分析,编译并优化它要执行查询的计划。
对于复杂查询来说,如果要重复执行许多次有不同参数的但结构相同的查询,这个过程会占用大量的时间,使得应用变慢。
通过使用一个预处理语句就可以避免重复分析、编译、优化的环节。
简单来说,预处理语句使用更少的资源,执行速度也就更快。
●传给预处理语句的参数不需要使用引号,底层驱动会处理这个。
如果应用独占地使用预处理语句,就可以确信没有SQL注入会发生。
正因为预处理语句是如此有用,它成了PDO惟一为不支持此特性的数据库提供的模拟实现。
这使你可以使用统一的数据访问规范而不必关心数据库本身是否具备此特性。
在JDBC组件中,PreparedStatement接口创建表示预编译的SQL语句的对象。
SQL语句经过预编译,并存储在PreparedStatement对象中。
然后,此对象可用来有效地多次执行此语句。
PreparedStatement接口继承Statement类,并与之在两方面有所不同:●PreparedStatement实例包含已编译的SQL语句。
由于PreparedStatement对象已预编译过,所以其执行速度要快于Statement对象。
因此,多次执行的SQL语句经常创建为PreparedStatement对象,以提高效率。
●包含于PreparedStatement对象中的SQL语句可具有一个或多个IN参参。
IN参数的值在SQL语句创建时未被指定。
相反的,该语句为每个IN参数保留一个问号(“?”)作为占位符。
每个问号的值必须在该语句执行之前,通过适当的SetXXX方法来提供。
作为Statement的子类,PreparedStatement继承了Statement的所有功能。
另外它还添加了一整套方法,用于设置发送给数据库以取代IN参数占位符的值。
JSP程序设计期末模拟试卷一、选择题(本大题共15小题,每小题2分,共30分)1.在JSP中如果要导入 java.io.* 包,应该使用( )指令。
A. pageB. taglibC. includeD. forward2.对于预定义<%!预定义%>的说法错误的是()A、一次可声明多个变量和方法,只要以“;”结尾就行B、一个声明仅在一个页面中有效C、声明的变量将作为局部变量D、在预定义中声明的变量将在JSP页面初始化时初始化3.JSP中的隐式注释为 ( )。
A. // 注释内容B. <!—注释内容-->C. <%--注释内容--%>D. /* 注释内容 */4.使用response对象进行重定向时使用的方法为()。
A.getAttribute( )B. sendRedirect( )C. setContentType( )D. setAttribute( )5.如果把用户名变量UserName放在session对象中,下面语句正确的是( )A.session.setName(UserName)B. session.setName(“name”,UserName)C. session.setAttribute(UserName)D. session.setAttribute(“name”,UserName)6.在JSP中,test.jsp文件中有如下一行代码:<jsp:useBean id=”user” scope=”_____”type=”erBean”/>要使user对象中一直存在于对话中,直至其终止或被删除为止,下划线中应填入()。
A.pageB.requestC.sessionD.application7.在JSP中,使用<jsp:useBean>动作可以将javaBean嵌入JSP页面,对JavaBean的访问范围不能是()。
A. pageB. requestC. responseD. application8.在JSP中,()动作用于将请求转发给其他JSP页面。
JDBC(Java Database Connectivity)是Java语言操作数据库的一种标准接口。
在进行数据库操作时,我们经常会使用JDBC的executeQuery方法来执行查询操作。
而在执行查询操作时,有时候我们需要传递对象参数。
本文将就JDBC executeQuery传递对象参数这一话题展开讨论。
一、介绍JDBC executeQuery方法1.1 executeQuery方法作用executeQuery方法是JDBC中Statement接口和PreparedStatement接口的一个方法,用于执行SQL语句并返回查询结果。
1.2 executeQuery方法使用示例```javaConnection conn = DriverManager.getConnection(url, username, password);String sql = "SELECT * FROM table_name WHERE column_name = ?";PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setObject(1, "parameter_value");ResultSet rs = pstmt.executeQuery();```二、JDBC executeQuery传递对象参数方法2.1 使用setObject方法在JDBC中,我们可以使用PreparedStatement的setObject方法来传递对象参数。
setObject方法的原型为:```javavoid setObject(int parameterIndex, Object x) throws SQLException;```其中,parameterIndex是参数的索引,x是用于设置参数的对象。
2.2 setObejct方法使用示例```javaString sql = "SELECT * FROM table_name WHERE column_name = ?";PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setObject(1, parameterObject);ResultSet rs = pstmt.executeQuery();```在示例中,parameterObject是要传递的对象参数。
1、在Java中如何使用execute()、executeQuery()、executeUpdate()三个方法?execute(String sql)执行给定的SQL 语句,该语句可能返回多个结果。
executeQuery(String sql)执行给定的SQL 语句,该语句返回单个ResultSet对象executeUpdate(String sql)执行给定SQL 语句,该语句可能为INSERT、UPDATE 或DELETE 语句,或者不返回任何内容的SQL 语句(如SQL DDL 语句)头2种一般在查询中使用最后一个在插入、更新、删除时使用2、executeQuery()是干什么用的?实现什么功能啊?使用JDBC连接数据库需要四步,第一步加载驱动程序;第二步,连接数据库;第三步,访问数据库;第四步,执行查询;其中在第四步执行查询时,要用statement类的executeQuery()方法来下达select指令以查询数据库,executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供我们使用。
即语句:String sql="select * from"+tableName; ResultSetrs=s.executeQuery(sql);3、executeQuery、executeUpdate或execute方法区别?在用纯JSP做一个页面报警功能的时候习惯性的用executeQuery来执行SQL语句,结果执行update时就遇到问题,语句能执行,但返回结果出现问题,另外还忽略了executeUpdate的返回值不是结果集ResultSet,而是数值!特收藏如下一篇文章(感谢网友们对各种信息的贡献):JDBCTM中Statement接口提供的execute、executeQuery和executeUpdate之间的区别Statement 接口提供了三种执行SQL 语句的方法:executeQuery、executeUpdate和execute。
statement接口的常用方法Statement接口是Java中用于执行SQL语句的接口,它是Java中访问关系型数据库的核心接口之一。
在使用Statement接口时,我们需要掌握一些常用的方法,以便能够更加高效地操作数据库。
1. execute方法execute方法是Statement接口中最常用的方法之一,它用于执行SQL语句并返回一个boolean类型的值。
如果SQL语句是查询语句,则返回true,否则返回false。
例如:```Statement stmt = conn.createStatement();boolean result = stmt.execute("SELECT * FROM users");```2. executeUpdate方法executeUpdate方法用于执行SQL语句并返回受影响的行数。
它通常用于执行INSERT、UPDATE和DELETE语句。
例如:```Statement stmt = conn.createStatement();int result = stmt.executeUpdate("INSERT INTO users (name, age) VALUES ('Tom', 20)");```3. executeQuery方法executeQuery方法用于执行SELECT语句并返回一个ResultSet对象,该对象包含了查询结果集中的所有数据。
例如:```Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM users");while (rs.next()) {String name = rs.getString("name");int age = rs.getInt("age");System.out.println("Name: " + name + ", Age: " + age);}```4. addBatch方法和executeBatch方法addBatch方法用于将多个SQL语句添加到批处理中,而executeBatch方法用于执行批处理中的所有SQL语句。
preparedStatement对象的execute()、executeUpdate()、executeQuery()看过的东西忘得太快,即便记住,真正用上了才发现记的东西模棱两可。
今天用jdbc写了一段SQL语句,用PreparedStatement对象来插入对象,用pstmt.execute()的执行结果来判断数据是否插入成功:pstmt = conn.prepareStatement("insert intocolumninfo(columntitle,reid,topid) values(?,?,?)");pstmt.setString(1, column.getColumntitle());pstmt.setInt(2, column.getReid());pstmt.setInt(3, column.getTopid());return pstmt.execute();测试的时候发现,数据明明插入成功,但是execute()的返回却是false ,晕了。
网上查了API才发现,对execute()返回的true、false的理解真是想当然了~public ResultSet executeQuery() throws SQLException返回一个不为空的结果集public int executeUpdate() throws SQLException返回:1、返回INSERT、UPDATE或者DELETE语句执行后的更新行数;2、返回0表示SQL语句没有执行成功。
public boolean execute() throws SQLException返回:true表示SQL语句执行的结果返回ResultSet对象;false表示SQL语句执行结果返回的是更新行数或者没有返回。
execute、executeUpdate和executeQuery之间的区别:1)execute:用于返回多个结果集的select语句(用于执行返回多个结果集、多个更新计数或二者组合的语句。
因为多数程序员不会需要该高级功能)<1>使用情况:(1)语句能返回多个ResultSet对象、多个更新计数或ResultSet对象与更新计数的组合时(2)执行某个已存储过程或动态执行未知SQL 字符串(即应用程序程序员在编译时未知)时,有可能出现多个结果的情况<2>获取execute的执行结果:(1)例如,已知某个过程返回两个结果集:必须调用方法getResultSet 获得第一个结果集(使用方法execute 执行该过程后)然后调用适当的getXXX 方法获取其中的值。
要获得第二个结果集,需要先调用getMoreResults 方法,然后再调用getResultSet 方法。
(2)若已知某个过程返回两个更新计数:则首先调用方法getUpdateCount,然后调用getMoreResults,并再次调用getUpdateCount。
(3)不知道返回内容的情况:如果结果是ResultSet 对象,则方法execute 返回true;如果结果是Java int,则返回false。
如果返回int,则意味着结果是更新计数或执行的语句是DDL 命令。
在调用方法execute 之后要做的第一件事情是调用getResultSet 或getUpdateCount。
调用方法getResultSet 可以获得两个或多个ResultSet 对象中第一个对象;或调用方法getUpdateCount 可以获得两个或多个更新计数中第一个更新计数的内容。
当SQL 语句的结果不是结果集时,则方法getResultSet 将返回null。
这可能意味着结果是一个更新计数或没有其它结果。
在这种情况下,判断null 真正含义的唯一方法是调用方法getUpdateCount,它将返回一个整数。
preparedstatement的用法PreparedStatement 是 Java 中用来执行 SQL 语句的对象,与 Statement 不同的是,PreparedStatement 可以使用占位符 "?" 来代替具体的参数值,这样可以更加灵活和安全地执行 SQL 语句,防止 SQL 注入攻击。
使用 Connection 对象的 prepareStatement() 方法可以创建出 PreparedStatement 对象,该方法需要传入一个 SQL 语句作为参数。
例如:```javaString sql = " SELECT * FROM users WHERE username = ? AND password = ?";PreparedStatement ps = conn.prepareStatement(sql);```2. 给占位符设置参数值使用 PreparedStatement 对象的 setXXX() 方法可以为占位符设置具体的参数值,XXX 表示参数的类型,如 setInt() 表示设置整型参数,setString() 表示设置字符串参数等。
```javaps.setString(1, username);ps.setString(2, password);```3. 执行 SQL 语句使用 PreparedStatement 对象的 execute()、executeQuery() 或 executeUpdate() 方法可以执行 SQL 语句。
其中,execute() 方法适用于执行任何类型的 SQL 语句,而executeQuery() 方法适用于执行 SELECT 语句并返回结果集,executeUpdate() 方法适用于执行 INSERT、UPDATE 或 DELETE 语句并返回受影响的行数。
```javaResultSet rs = ps.executeQuery();while (rs.next()) {// 处理查询结果}```上面的代码执行了一个 SELECT 语句并将结果集保存到 ResultSet 对象中,通过遍历 ResultSet 对象可以依次取出每一行记录。
execute、executeUpdate、executeQuery三者的区别(及返回值)1. ResultSet executeQuery(String sql); 执⾏SQL查询,并返回ResultSet 对象。
2.int executeUpdate(String sql); 可执⾏增,删,改,返回执⾏受到影响的⾏数。
3.boolean execute(String sql); 可执⾏任何SQL语句,返回⼀个布尔值,表⽰是否返回ResultSet 。
execute是executeQuery和executeUpdate的综合.使⽤哪⼀个⽅法由 SQL 语句所产⽣的内容决定。
---------------------------------------------------------------------------------------------------------------------------------------executeUpdate() 这是 PreparedStatement 接⼝中的⽅法executeUpdate(String sql) 这是 PreparedStatement 从⽗接⼝ Statement 中继承过来的⽅法executeUpdate() 中执⾏ SQL 语句需要在创建 PerparedStatement 时通过 Connection 的 prepareStatement(String sql) ⽅法中写出,因为PerparedStatement 中的 SQL 语句数据库需要进⾏预编译和缓存,因此要在创建 PerparedStatement 对象时给出 SQL 语句。
⽽ executeUpdate(String sql) 是 Statement 中的⽅法,参数中的 SQL 语句只是提交给数据库去执⾏,并不需要预编译。
如果 SQL 语句中有 ? 占位符,那么在设置好占位符中的值后,必须使⽤ executeUpdate() 执⾏。
PG数据库存储过程中executeUpdate语句1. 背景介绍PostgreSQL(简称PG)是一种颇受欢迎的开源关系型数据库管理系统,被广泛应用于各种规模的企业和组织中。
在PG数据库中,存储过程是一种重要的数据库对象,可以被用来存储一系列SQL语句以及其他PL/pgSQL语言代码,以实现复杂的业务逻辑。
而executeUpdate 是存储过程中的一个重要语句,用于执行更新数据库记录的操作。
在本文中,我们将深入探讨PG数据库存储过程中executeUpdate语句的用法和相关注意事项。
2. executeUpdate语句的作用executeUpdate语句用于执行INSERT、UPDATE、DELETE等更新数据库记录的操作。
在PG数据库存储过程中,通过使用executeUpdate语句,可以方便地编写包含数据操作的存储过程,实现业务逻辑的复杂操作和数据的持久化。
executeUpdate语句的语法相当简单,一般形式为:```EXECUTE 'UPDATE table_name SET column1 = value1 WHERE key_column = key_value';```其中,table_name是要更新的表名,column1是要更新的列名,value1是要更新的值,key_column是条件列名,key_value是条件值。
通过执行executeUpdate语句,可以将符合条件的记录更新为指定值。
3. executeUpdate语句的使用示例为了更好地理解executeUpdate语句的使用方法,下面我们举一个示例。
假设有一个简单的存储过程,用来更新用户表中的用户名和密码,其代码如下:```CREATE OR REPLACE FUNCTION update_user(username VARCHAR, password VARCHAR, user_id INTEGER) RETURNS VOID AS $$BEGINEXECUTE 'UPDATE users SET username = $1, password = $2 WHERE id = $3' USING username, password, user_id;END;$$ LANGUAGE 'plpgsql';```在上面的示例中,我们首先创建了一个名为update_user的存储过程,接受三个参数,分别是新的用户名、新的密码以及用户ID。
多选1 Java JDBC 异常类中包含的成员有a Java , Sql . DataTruncationb ) Java , Sql , seL Waring2.常用的黑盒测试方法有(边值分析、等价类划分、因果图)3.Java中,变量的命名可以采用下列哪些规范?a 用名词作为变量名,全部小写b )用名词短语作为变量名,除第一个词首字母小写外,后面每个词第一个字母大写4 spring 的两种核心思想是0a ) Spring IOc 编程b ) Spring AOP 编程c)Spring AOP 的使用d)Spring 事务管理5.对国际标准化组织的描述正确的是a )一个由国家标准化机构组成的世界范围的联合会b )中央办事机构设在瑞士的日内瓦c)宗旨是在世界范围内促进标准化工作的发展6.建立TCP 服务器端需要驛两个步骤a )建立一个ServerSocket 对象b )开始监听7.哪些情况会造成当前线程阻塞?a )调用Thread 类的walt 方法b )调用Thread 类的sleep 方法8.网络拓扑结构分为a 星型网络结构b 环型网络结构c)总线型网络结构d)网状结构9.“调用堆栈”窗口显示()a 每个函数的名称b )编写它所用的语言10. Mv 模式的优势有哪些?()a) Mvc 模式使应用程序的结构更加清晰,迪过将代码按照层次划分为业务逻辑/数据层、用户界面和应用流程控制这三个层次能够增强代码的稳定性b )对于项目开发而言, MVC 三层分离有利于在项目小组内按照小组成员各自的擅长进行分工,有利于三个部分并行开发、加快项目进度c) Mvc 模块功能的划分有利于在代码修改过程中进行模块的隔离,而不需要把具有不同功能的代码混杂在一起造成混乱11.面向对象软件开发的特点是(a 模型从需求开始被开发b )业务模型逐步演化为详细的类模型、类连接和关系、系统设计和分配、对象设计c )测试的目标是在错误传播到下一次递进前发现错误12下面哪些说法是正确的()a )匿名内部类可以在方法内部声明b )匿名内部类的构遣函数可以有参数13.《中华人民共和国专利法》于(进行了修改2000年、1992年14.同步事件有()a ) AutoResetEventb ) AutoEvent15Java中,变量的命名可以米用下列哪些规范?a )用名词作为变量名,全部小写b )用名词短语作为变重名,除第一个词首字母小写外,后面毎个词第一个字母大写16.下面哪些属于系统软件(Dos 、UNIx17,在Java 中,关于捕获异常的语法trya " a 明下列描述中正确的是a ) try — catch 必须配对使用b)在try - catch 后如果定义了finaly ,则finaly 肯定会执行18.JA V A面向对象的特征是(继承、封装、多态19.下面是关于解释程序和编译程序的论述,其中错误的是()。
execute、executeQuery和executeUpdate之间的区别
2008-05-28 15:30
在用纯JSP做一个页面报警功能的时候习惯性的用executeQuery来执行SQL语句,结果执行update时就遇到问题,语句能执行,但返回结果出现问题,另外还忽略了executeUpdate的返回值不是结果集ResultSet,而是数值!特收藏如下一篇文章(感谢网友们对各种信息的贡献):
JDBCTM中Statement接口提供的execute、executeQuery和executeUpdate之间的区别
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; // 没有其它结果。