execute、executeQuery和executeUpdate之间的区别

合集下载

preparedstatement方法

preparedstatement方法

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月高等教育自学考试互联网数据库真题_真题(含答案与解析)-交互

2018年10月高等教育自学考试互联网数据库真题_真题(含答案与解析)-交互

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.数据管理经历了三个发展阶段:人工管理阶段、文件系统阶段和 ________阶段。

描述Connection、Statement、ResultSet接口的作用

描述Connection、Statement、ResultSet接口的作用

这些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题库

JDBC题库

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.preparedstatement方法

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 预处理语句的优点

JSP  预处理语句的优点

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参数占位符的值。

教室管理系统

教室管理系统

教室 租用
登录
输入 学生干 事 用户 名(adm in) 和密 码(pas w)
后台 管理
登录
输入 管理员 账 户(admin)和密
码(pas w)
是否和库中 N
含有 学生账 户信 息一致
Y
输入 该教室 租 用表 的信息
是否和库中 N
含有 管理员 账户 信息一

Y
输入 该教师 开 课表 的信息
结束
第三 部分
账号 (admin)
密码 (pasw)
学生 干事 (studentadmin)
学号 (admin)
学生

(student)

工作 日
(weekday)
时间 段 (periome)
院系号 (deptno)
第五 部分
第五部分 数据库逻辑设计(全局关系模式)
教学楼(building) :(教学楼号(bno),教学楼名称(bname)) 教室(classroom ) :(教室编号(clno),教学楼号(bno),楼层(floor), 状态(usestatus)) 院系(department) :(院系号(deptno),院系名称(deptname )) 课程(lesson) :(课程号(cno),课程名称(cname),学分(credit),课程 类型(category),开课院系号(deptno)) 教师表(teacher) :(教师号(tno),教师姓名(tname),性别(sex),所属 院系(deptno),职称(title)) 学生表(student) :((学号(sno),姓名(sname),所属院系(deptno )) 教师开课表 (tclass) :(教师号(tno),教室号(clno),课程号(cno),院 系号(deptno),工作日(weekday ),上课时间段(period )) 教室借用表 (cborrow) :(教室号(clno),使用人编号(sno),使用日期 (usedate),工作日(weekday),借用时间段(period),用途(uses) 学生干事 (studentadmin) :(用户名(admin),密码(pasw)) 管理员 (admin) :(账号(admin),密码(pasw))

2012下半年JSP程序设计期末模拟试卷及答案

2012下半年JSP程序设计期末模拟试卷及答案

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页面。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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; // 没有其它结果。

相关文档
最新文档