




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章 在JSP中使用数据库 1、深入理解JDBC的工作原理 2、掌握使用java数据库驱动连接数据库的基本步骤 3、掌握JDBC数据库的查询、更新操作 4、会在JSP页面中灵活使用数据库 5、了解JDBC-ODBC桥接器数据库连接方式 6、了解预处理语句和通配符 课程目标 1、JDBC介绍 * 概念 * 工作原理 2、连接数据库的常用方式 * 使用Java数据库驱动 * JDBC-ODBC桥接器 3、JDBC查询操作 * 顺序查询 * 随机查询 4、JDBC更新、添加与删除操作 5、预处理语句和通配符 内容提要 6.1 JDBC介绍 1、什么是JDBC JDBC(Java DataBase Connectivity),SUN公 司为Java程序提供的访问各种数据库的API,它由一 些Java类和接口组成。 2、JSP与JDBC JSP页面 Java程序片, 使用java语法 连接数据库 数据库 返回结果 建立连接、发送SQL语句 3.JDBC的基本原理 早期数据库开发模式 6.1 JDBC介绍 编程语言 Oracle Sybase SQLServer MySQL API for Oracle API for Sybase API for SQLServer API for MySQL 使用 使用 使用 使用 操作 操作 操作 操作 各种数据库 1、程序员操作不便 2、产品维护成本增加 3.JDBC的基本原理 JDBC开发数据库模式 6.1 JDBC介绍 各种数据库 Oracle Sybase SQLServer MySQL API for Oracle API for Sybase API for SQLServer API for MySQL JDBC 接 口 由 各 个 数 据 库 厂 商 实 现 接口1 接口2 接口3 接口4 编程语言统一接口 1、纯Java数据库驱动程序 使用java语言编写的数据库驱动程序(数据库厂商完成)。 JDBC提供的API将Java数据库驱动转换为数据库系统所使用的 专门协议来实现与数据库交互 2、JDBC-ODBC桥接器 应用程序建立“JDBC-ODBC”之间的连接,即“桥接器”,和数 据库的连接由ODBC(Open Database Connectivity)去完成。 6.2 JDBC连接数据库的常用方式 JDBC调用Java数据库驱动程序 充分利用ODBC的优势 JDBC-ODBC 1、纯Java数据库驱动程序 6.2 JDBC连接数据库的常用方式 应用程序JDBC Oracle驱动 SQL Server 驱动 MySQL驱动 其他驱动 Oracle数据库 SQL Server MySQL数据库 其他数据库 使 用 加 载 连接 连接 连接 连接 使用JDBC的应用程序所驻留的计算机 1、纯Java数据库驱动程序 JDBC 1)位置:位于JDK的安装目录下 2)内容 接口:Driver、Connection、Statement ResultSet 类:DriverManager 6.2 JDBC连接数据库的常用方式 C:Program FilesJavajdk1.6.0_02jrelibrt.jar import java.sql.* 1、纯Java数据库驱动程序 JDBC 6.2 JDBC连接数据库的常用方式 名称解释 Driver 驱动程序接口,被数据库厂商实现,加 载后才能连接数据库 DrvierManager (类) 处理驱动的调入,并且产生新的数据库 连接 Connection代表对特定数据库的连接 Statement用于发送SQL语句,接收SQL的执行结果 ResultSet执行查询语句得到的结果集 使 用 顺 序 自 上 而 下 1、纯Java数据库驱动程序 数据库驱动(SQL Server2005) 1)位置 需要开发者下载,并配置 项目根目录WebRootWEB-INFlib 2)内容(对JDBC底层接口的实现类) 6.2 JDBC连接数据库的常用方式 1、JDBC准备工作 1)下载JDBC数据库驱动(驱动由相应的数据库厂商来提供) 例如:SQL Server2005 sqljdbc.jar com.microsoft.sqlserver.jdbc.SQLServerDriver 2)配置JDBC数据库驱动 将sqljdbc.jar文件拷贝到MyEclipse中的web项目 的目录WebRootWEB-INFlib下 (驱动文件随项目一起部署,较为规范) 6.3 使用JDBC连接数据库 2、JDBC编程步骤 步骤1:在程序中加载驱动 *驱动程序类: com.microsoft.sqlserver.jdbc.SQLServerDriver *加载方法:Class.forName(驱动程序类) 6.3 使用JDBC连接数据库 try catch (ClassNotFoundException e) System.out.println(“数据库驱动加载错误“); Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver“); 注意:Class是包java.lang中的一个类,该类调用静态方法 forName可以加载驱动,该方法抛ClassNotFoundException异 常,因此需要捕获异常 2、JDBC编程步骤 步骤2:创建连接对象(连接数据库) 使用DriverManager类的方法getConnection创建连接对象 格式: Connection conn = DriverManager.getConnection(String uri, String user, String password) 参数说明: uri:要连接的数据库的路径,根据数据库不同变化 user:登录数据库的用户名 password:登录数据库的密码 注意:该方法会抛出SQLException(SQL异常) 6.3 使用JDBC连接数据库 步骤2:创建数据库连接对象 6.3 使用JDBC连接数据库 String uri= “jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=school“; String user = “sa“; String password = “sa“; try Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver“); Connection conn = DriverManager.getConnection(uri, user, password); catch (ClassNotFoundException e) System.out.println(“数据库驱动加载错误“); catch (SQLException e) System.out.println(“获取连接错误“); if (conn != null) System.out.println(“数据库连接成功“); 数据库名 服务器ip 如果得到空对象说明连接失败 2、JDBC编程步骤 步骤3:发送SQL语句到数据库 1)创建Statement 作用:Statement对象用于将SQL语句发送到数据库中 格式:Statement stmt = conn.CreateSatement() 2)执行SQL语句(调用Statement的方法) 查询方法:public ResultSet executeQuery(String sql) throws SQLException 更新方法:public int executeUpdate(String sql) throws SQLException 6.3 使用JDBC连接数据库 添加、修改、删除 2、JDBC编程步骤 步骤3:发送SQL语句到数据库(例:查询) 6.3 使用JDBC连接数据库 try String sql = “select * from student“; Statetment stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); catch() SQL语句 语句对象 执行SQL 说明:此步骤得到的结果存储在rs结果集合中,下一步要遍历结果集取出数据来应用 2、JDBC编程步骤 步骤4:遍历展示结果集 1)遍历行:ResultSet对象的next()方法rs.next() 2)遍历列:通过ResultSet对象的getXXX()方法遍历行中的列 * Int getInt( String FieldName) * float getFloat(String FieldName) * Date getDate(String FieldName) * String getString(String FieldName) 6.3 使用JDBC连接数据库 游标 游标 游标 游标 String sql = “select * from student “; Statetment stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while(rs.next() out.print(rs.getString(“id“); out.print(rs.getString(“name“); out.print(rs.getInt(“gender“); out.print(rs.getInt(“age“); out.print(rs.getInt(“class“); out.print(“); 注意:此时游标停留 在当前结果集的第一 行的前面 注意:此时游标停留在第一行 输出结果:在jsp页面中逐行打印出结果集中的记录 2、JDBC编程步骤 步骤5:关闭数据库连接 1)rs.close( ) 关闭结果集 2)stmt.close( ) 关闭statement对象 3)conn.close() 关闭Connection对象 6.3 使用JDBC连接数据库 注意:关闭数据库连接的顺序 2、JDBC编程步骤(总结) 6.3 使用JDBC连接数据库 加载驱动 连接数据库 发送SQL语句 处理返回结果 关闭资源 Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver“); String uri = “jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=school“; Connection conn = DriverManager.getConnection(uri, user, password); Statement stmt = conn.CreateSatement(); ResultSet rs = stmt.executeQuery(sql); rs.close();stmt.close();conn.close(); while(rs.next() out.print(rs.getString(“id“); 总结2: JDBC API中重要的接口和类 这几个常用的类和接口都位于包java.sql中,接口 的实现类为于com.microsoft.sqlserver.jdbc中 6.3 使用JDBC连接数据库 名称解释 Driver驱动程序接口被数据库厂商实现,加载后才能连接数据库 DrvierManager(类)处理驱动的调入并且对产生新的数据库连接 Connection代表对特定数据库的连接 Statement用于发送Sql语句,并接收Sql的执行结果 ResultSet执行查询语句得到的结果集 顺序查询 *简单查询 *select * from student *条件查询 *select * from student where age=23 *select * from student where age23 *排序查询 *select * from student order by jspscore *select * from student order by jspscore asc *select * from student order by jspscore desc 6.4 JDBC数据库查询 模糊查询 *select * from student where name like 张% * 张、张三、张晓晓 *select * from student where name like 张_ * 张三、张晓 *select * from student where name like %小% * 张小青、王小红、李小丽 练习 *写出SQL语句查询t1表中content字段包含“java”,并且倒 数第2个字符为E的记录 *select * from t1 where content like %java%E_ 6.4 JDBC数据库查询 学生练习时间。 6.4 JDBC数据库查询 DBManager: executeQuery query1.jsp (简单查询) 条件查询 模糊查询 排序查询 Statement对象调用方法: *public int executeUpdate(String sqlStatement); *返回的是影响的行数,若返回0,则说明更新操作失 败 SQL语句 *添加记录insert *insert into test values(zhangsan, 23) *insert into test(name) values(lisi) *修改记录update *update test set age=40 where name=zhangsan *删除记录delete *delete from test where name=zhangsan 6.5 更新、添加与删除 SQL语句 *注意:字符串拼接技巧 6.5 更新、添加与删除 以插入记录的SQL为例, 插入记录操作时,变量var中存储着字段的值, 首先:写好insert into student values ( ) 然后 (1)见到字符串类型的字段,sql中就拼”+var+”, (2)见到数据类型的字段,sql中就拼”+var+” 最后形成: insert into student values(“+id+“,“+name+“,“+age+“,“+jspscore+“); 案例:insert1.jsp insert1Handle.jsp 随机查询(了解,参考教材中P139-143) *顺序查询:使用ResultSet结果集只能够执行顺序查询rs.next() 方法,因为结果集合的游标只能够顺序的依次下移,不能够后 退,也不能够随机的定位。 *随机查询:结果集可以随意的滚动和定位进行随机查询需 要支持可滚动的结果集 6.6 JDBC随机查询滚动结果集 第1条 第4条 第3条 第1条 随机查询 * Statement stmtconn.createStatement(int type,int oncurrency) *Type取值决定滚动方式 *ResultSet.TYPE_FORWARD_ONLY:游标只能向下滚动 *ResultSet.TYPE_SCROLL_INSENSITIVE :游标可以上下移 动,不敏感 *ResultSet.TYPE_SCROLL_SENSITIVE :游标可以上下移动 ,敏感 *Concurrency决定是否可以用结果集更新数据库 *ResultSet.CONCUR_READ_ONLY :不能用结果集更新数据 *ResultSet.CONCUR_UPDATABLE:可以用结果集更新数据 *例如:创建一个支持滚动的结果集 6.6 JDBC随机查询滚动结果集 Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs = stmt.executeQuery(sql) 利用支持滚动的Statement对象创建出来的结果集是支持 滚动的结果集。 支持滚动的结果集rs对象可以使用的方法 *rs .previous() 游标向上移动一次,若游标指向第一行时, 调用该方法返回false,指向其他行时,调用返回true *rs . next()、 rs . first() 、 rs . last() *rs . absolute(int row) 游标指定移动到某行 *rs . isBeforeFirst()、 rs . isAfterLast()、 rs . isFirst()、 rs . isLast() *rs . getRow() 返回当前游标指向的行号,行号从1开始 *示例:chap06/query/*.jsp 6.6 JDBC随机查询滚动结果集 学生练习时间。 思考题: *如何获取数据库中某个表中的记录数? *1)遍历rs结果集,使用局部变量count+ *2)使用select count(*) as count from user1 查询出计算字段, 并命名为count,再利用rs.getString(1),将其获取出来 *3)使用可滚动的结果集,rs.last(); rs.getRow(); 6.6 JDBC随机查询滚动结果集 滚动结果集练习 chap06/scrollresult/*.jsp 思考题 6.6 JDBC随机查询滚动结果集 /方法一 String uri = “jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=school“; try Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver“); Connection conn = DriverManager.getConnection(uri,“sa“,“6507725“); Statement stmt = conn.createStatement(); String sql = “select count(*) as count from userInfo“; ResultSet rs = stmt.executeQuery(sql); while(rs.next() System.out.println(“userInfo表总共行数为:“ + rs.getString(1); catch (ClassNotFoundException e) catch (SQLException e) 6.6 JDBC随机查询滚动结果集 /方法二 try Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver“); Connection conn = DriverManager.getConnection(uri,“sa“,“6507725“); Statement stmt = conn.createStatement(); String sql = “select * from userInfo“; ResultSet rs = stmt.executeQuery(sql); int rowCount = 0; while(rs.next() rowCount+; System.out.println(“userInfo表总共行数为:“ + rowCount); catch (ClassNotFoundException e) catch (SQLException e) 注意:这种实现方法有个弊端,如果此时想对rs的结果集进行操作,是没有办法的 。因为游标已经停留在最后一行之后,最好使用支持滚动的结果集,重新将游标放 到第一行。 rs.first(); Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 预处理语句PreparedStatement *位于包java.sql中 *优点1:SQL语句的字符串拼接 *在对SQL进行预处理时可以使用通配符“?”代替字段的值,需 要在预处理语句执行之前(即调用executeQuery或者 executeUpdate方法之前)设置通配符所表示的具体值, 6.7 预处理语句 String sql =“insert inot student values(?,?,?,?) “ PreparedStatement pstmt=conn.prepareStatement(sql); 预处理语句PreparedStatement *可以使用如下方法设置值: *void setString(int parameterIndex, String x) *void setInt(int parameterIndex, String x) *参数parameterIndex用来表示SQL语句通配符的位置, x是该通配符所取的具体值 *可以使用如下方法操作数据库 *ResultSet executeQuery() *int executeUpdate() 6.7 预处理语句 pstmt.setString(1, “001“); pstmt.setString(2, “Zhangsan“); pstmt.setInt(3, 23); pstmt.executeUpdate() 案例:insert2.jsp insert2Handle.jsp insert3.jsp insert3Handle.jsp 预处理语句PreparedStatement *优点2:SQL语句的执行 6.7 预处理语句 应用程序 Oracle SQL语句 SQL解释器 数据库产品 底层内部命令 执行结果 底层内部命令 连接Oracle数据库 *加载驱动程序 *Class.forName(“oracle.jdbc.driver.OracleDriver“); *建立连接 *Connection conn=DriverManager.getConnection( “jdbc:oracle:thin:主机host:端口号:数据库名“, ”用户名“, ”密码 “); 6. 8 JDBC连接其他数据库 应用程序建立JDBC和ODBC之间的连接,即所谓的 建立JDBC-ODBC桥接器,而和数据库的连接由ODBC 完成 6.9 JDBC-ODBC桥接器连接数据库 编程语言 Oracle Sybase SQLServer MySQL API for Oracle API for Sybase API for SQLServer API for MySQL JDBCODBC 使用JDBC-ODBC桥接器访问数据库的步骤 *创建ODBC数据源 *步骤:控制面板ODBC数据源用户DSN添 加选择数据库驱动程序完成数据源名选择数 据库 *加载桥接器驱动程序 Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); rt.jar-sun.jdbc.odbc包下JdbcOdbcDriver类(jdk自带 的) *和ODBC数据源建立连接 Connection con=DriverManager. getConnection(“jdbc:odbc:数据源名字”, “uername”, “password”); 6.9 JDBC-ODBC桥接器连接数据库 例.ODBC连接EXCEL 和 sqlserver TestODBCExcel.java Test.jsp package dj.nepu; import java.sql.*; public class Test public static void main(String args) / TODO Auto-generated method stub Connection conn = null; Statement stmt = null; ResultSet rs = null; String sql=“select * from student“; try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); conn = DriverManager.getConnection(“jdbc:odbc:s“,“sa“,“123456“); stmt = conn.createStatement(); rs = stmt.executeQuery(sql); catch (ClassNotFoundException e) / TODO Auto-generated catch block e.printStackTrace(); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace(); try while(rs.next() System.out.print(rs.getString(1)+“ “); System.o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第一专题研讨发言稿
- 幼儿保育课件
- 形象塑造课程课件
- 2025版住宅小区智能化改造物业合作协议
- 2025版节能环保型建筑玻璃贴膜施工服务合同
- 二零二五年度环保设备销售台账合同及环保技术研发服务协议
- 2025版互联网企业员工安全责任与培训合同
- 二零二五年度土壤污染修复地质勘察合同范本
- 2025版企业员工职业生涯规划与培养协议下载
- 二零二五年度钢管租赁及项目管理服务合同
- 2025年(完整版)十八项核心制度培训考核试题(含答案)
- 2025年低压电工理论考试1000题(附答案)
- 社工的劳动合同范本(2025版)
- KET教学课件新版
- 统计过程控制
- T∕ACSC 01-2022 辅助生殖医学中心建设标准(高清最新版)
- 赶工措施工程施工办法
- 公制螺纹量规尺寸标准对照表
- 房屋加固与修复工程结构加固监理实施细则
- QFP器件引脚成形参数理解和计算方法
- 三栋监舍楼家具详细技术参数
评论
0/150
提交评论