JSP访问数据库

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

• ResultSet
• ResultSet 对象包含了Statement和 PreparedStatement的executeQuery方法中SELECT 查询的结果集,即符合指定SQL 语句中条件的所 有行。 • ResultSet.next 方法用于移动到 ResultSet 中 的下一行,使下一行成为当前行。结果集一般是 一个表,其中有查询所返回的列标题及相应的值。
ex60
游动查询
• 有时需要在结果集中前后移动或显示结果集指定的一条记 录等等。则需返回一个可滚动的结果集为了得到一个可滚 动的结果集,需先获得一个Statement对象: Statement stmt=con.createStatement(int type, int concurrency); 然后,根据参数type, concurrency取值情况,stmt返回相应 类型的结果集: ResultSet re=stmt.executeQuery(SQL语句);
• Statement
• 创建了Statement接口的实例后,可调用其中的方 法执行SQL语句,JDBC中提供了三种执行方法,它 们是execute()、executeQuery()和 executeUpdate()。 • executeUpdate方法 :这个方法一般用于执行SQL 的INSERT、UPDATE或DELETE语句,当执行INSERT 等SQL语句时,此方法的返回值是执行了这个SQL 语句后所影响的记录的总行数。
• Statement
• executeQuery方法 :一般用于执行SQL的SELECT语 句。它的返回值是执行SQL语句后产生的一个 ResultSet接口的实例(结果集)。 • execute方法 :一般是在用户不知道执行SQL语句后 会产生什么结果或可能有多种类型的结果产生时才 会使用。execute()的执行结果包括如下三种情况: 1.包含多个ResultSet(结果集); 2.多条记录被影响; 3.既包含结果集也有记录被影响。
• ResultSet对象常用的更新操作方法:
ex68
分页显示记录
• 假设总记录为m,每页显示数量是n,那么总 页数的计算公式是:
① 如果m除以n的余数大于0,总页数等于m除以n 的商加1; ② 如果m除以n的余数等于0,总页数等于m除以n 的商;
如果准备显示第p页的内容,应当把游标移 动到第(p-1)*n+1条记录处。
JSP访问数据库
关系数据库
Access
SQL server Oracle
数据库
Object
View procedure ……
DAO
DB.data
DBMS
不同DBMS对底层数据有不同的操作方法, 为了隐蔽DBMS和数据操作的差异性,产生了 统一标准:SQL
SQL语言
Jdbc结构
SQL
driver
与一个数据库建立连接; 向数据库发送SQL语句; 处理数据库返回的结果。

使用JDBC对数据库进行一次数据库操作 需要进行如下的几个步骤:
① ② ③ ④ ⑤ ⑥ ⑦ 载入JDBC驱动程序 定义连接使用的URL 建立连接 创建语句对象 执行数据库操作 处理结果 关闭连接
• JDBC和数据库建立连接的一种常见方式是 建立起一个JDBC-ODBC桥接器。由于 ODBC驱动程序被广泛使用,建立这种桥接 器后,使得JDBC有能力访问几乎所有类型 的数据库。 • JDBC也可以直接加载数据库驱动程序来访 问数据库。 • 如果使用JDBC-ODBC桥接器访问数据库, 事先必须设置数据源。
ex69
连接数据库其他方法
• 连接Oracle
可通过JDBC-ODBC桥接器和Oracle数据库建立 连接,但这种连接质量依赖于ODBC.
查询excel电子表
• 可以通过JDBC-ODBC桥接器访问Excel电 子表格。
ex70
使用同步连接
• 数据库操作中,建立连接是耗时最大的操作之一。如果客 户访问的是同一数据库,那么为每一个客户建立一个连接 是不合理的。 • 当多个客户请求一个JSP页面时,JSP引擎为每个客户启 动一个线程而不是一个进程,这些线程由Web服务器进程 来管理,它们共享JSP页面的成员变量。在处理多线程问 题时,可将线程共享的变量放入一个synchronized块,或 将修改该变量的方法用synchronized来修饰,这样,当一 个客户用synchronized块或synchronized方法修改一个共 享变量时,其他线程必须等待,直到该线程执行完该方法 或同步块。 • 这样可把connection对象作为一个成员变量被所有的客户 共享,第一个访问数据库的客户负责建立连接,以后所有 客户共享这个连接。
处理查询结果
• 有了SQL语句对象后,这个对象就可以调用相应的方法实 现对数据库中表的查询和修改,并将查询结果存放在一个 ResultSet类声明的对象中,即SQL语句对数据库的查询 操作将返回一个ResultSet对象: ResultSet rs=sql.executeQuery(“SELECT * FROM 成绩 表”) ResultSet对象是由统一形式的列组织的数据行组成。 ResultSet对象一次只能看到一个数据行,使用next()方法 走到下一数据行。获得一行数据后, ResultSet对象可以 使用getxxxx方法获得字段值,将位置索引(第一列使用1, 第二列使用2等等)或字段名传递给getxxxx方法的参数即 可。
DBMS
将SQL调用转 化为DBMS API 调用
JDBC结构
Java.sql.*
JDBC应用程序结构

三种常见的JSP通过JDBC访问数据库的 方法
① 在JSP页面中直接访问数据库 ② 在Servlet中访问数据库 ③ 通过JavaBean封装对数据库的访问
• 在JSP中可使用Java的JDBC技术,实现对 数据库中表记录的查询、修改和删除等操 作。 • JDBC(Java DataBase Connectivity)是Java 数据库连接API。可完成三件事:
向数据库发送SQL语句
• 首先使用Statement类声明一个SQL语句对 象,然后通过刚才创建的连接数据库的对 象con调用方法createStatment()创建这个 SQL语句对象。 • try{ Statement sql=con. createStatment(); } catch(SQLException e){}
ex66
添加记录
• 对于添加记录注意事项与上同
ex67
• 删除记录
用结果集更新数据库中的表
• 尽管可以用SQL语句对数据库中的表进行 更新,也可以使用内存中的ResultSet对象 对底层数据库进行更新。
用结果集更新数据库中的表
• 步骤:
① 由Connection对象调用如下方法,到一个可以更新底层数据 库的Statement对象sql; ② Statement对象sql调用如下方法得到ResultSet对象rs: ③ rs调用相应updateXXX方法对rs中所有的行的列值进行更新 操作。例: ④ 将rs移动到第n行后,然后调用updateRow()方法,更新底层 数据库表中的第n条记录。rs也可以调用rs.insertRow()方法 将更新的结果集作为一条新的记录插入到底层数据库表中。 如果rs的某列的值未被更新,那么插入到底层数据库表中的 记录的相应字段值为null.
更新记录
• 用SQL语句更新记录中字段的值。 Statement对象调用方法: public int executeUpdate(String sqlStatement); 通过参数sqlStatement指定的方式实现对 数据库表中记录的字段值的更新。
注意事项
• 可使用一个Statement对象进行更新和查询 操作,但当查询语句返回结果集后,如果 没有立即输出结果集的记录,而接着执行 了更新语句,那么结果集就不能输出记录。 要想输出记录就必须重新返回结果集。
DBC桥接器
• 直观的理解:一个数据源就是一个数据库。为了要链接到 这个数据库,需要建立一个JDBC-ODBC桥接器,即加载 桥接器驱动程序。 Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); 其中,Class是包java.lang中的一个类,该类通过调用它的 静态方法forName就可以建立JDBC-ODBC桥接器。建立 桥接器可能发生异常,所以建立桥接器的标准是: try{ Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); } catch(ClassNotFoundException e) {}
ex71
网上投票
ex72
• String 的长度是不可变的,StringBuffer的 长度是可变的。如果对字符串中的长度经 常进行操作,特别是内容要修改时,使用 StringBuffer,如果最后需要String,那么使 用StringBuffer的toString()方法。
数据库连接池
• 在基于数据库的 Web系统中,如果在较短 的时间内,访问数据库的请求量不大 • 但随着请求数不断增加,系统的开销越来 越大,响应 Web请求的速度越来越慢,就 会导致系统无法响应Web 请求。
ResultSet类的方法
driver connection
注 意 次 序 !
Statement ResultSet close
顺序查询
• 使用结果集Result的next()方法,可以顺序 地查询。一个结果最初将游标定位在第一 行的前面,第一次调用next()方法使游标移 动到第一行。Next()方法返回一个boolean 型数据,当游标移动到最后一行之后返回 false.
• 造成这种结果的原因是由于传统数据库访问模式 存在下面的一些缺陷: • 每次数据库请求都需要建立一次数据库连接,而 每建立一次数据库连接就需要花费 0.05s~1s的 时间,这个时间相对于数据库本身的操作时间和 软件本身的执行时间来说,是非常漫长的。 • 由于没有对连接数据库的连接数量进行控制,因 此可能出现超出数据库处理能力的连接数量和处 理请求,导致系统的崩溃。 • 单独管理每一个连接,并进行使用后的资源回收。 在这种方式下,如果某些连接出现了异常,导致 无法正常关闭连接,那么将会导致资源的严重浪 费甚至数据库服务器的内存泄漏。 • 由于以上的缺点,开发人员设计出一种叫做“连 接池”的技术,来处理传统连接方式带来的问题。
连接池的基本原理
• 在应用共享资源的开发中,有一个很著名 的设计模式:资源池(Resource Pool)。 该模式正是为了解决资源的频繁分配﹑释 放所造成的一系列问题而设计的。在数据 库领域,这个设计模式的很重要的应用就 是数据库连接池。
Type取值决定滚动方式,取值可以是:
ex61
随机查询
ex62
参数查询
ex63
排序查询
ex64
分析结果集查询
ex65
使用通配符查询
• 可以使用SQL语句操作符like进行模式般配, 使用”%”代替一个或多个字符,用一个下 划线”_”代替一个字符。 • 例:rs.executewk.baidu.comuery(“select * from students where 姓名 like ‘王’ ”)
查询记录
• 要查询数据库中的记录,必须和数据库建 立连接。由于是以JDBC-ODBC方式访问数 据库,就要与数据源建立连接。
连接到数据库
• 首先使用包java.sql中的Connection类声明一个对象,然 后再使用类DriverManager调用它的静态方法 getConnection创建这个连接对象。 Connection con= DriverManager.getConnection(“jdbc:odbc:数据源名 字”,”login name”,”password”); 如果还没为数据源设置login name和password,则连接形式 是: Connection con= DriverManager.getConnection(“jdbc:odbc:数据源名 字”,””,””);
相关文档
最新文档