




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,Web开发技术基础(Java),东北大学东软信息学院 计算机系网络工程教研室,2,第7章 访问数据库,7.1 数据库与SQL 7.2 数据库安装 7.3 使用JDBC访问数据库,3,7.1 数据库与SQL语言,4,数据库与SQL语言,参见教材P159-163,5,7.2 数据库安装,6,安装SQL Server2000,安装SQL Server2000个人版 教材P163-P170,7,安装和配置MySQL,安装过程 P171-179 注意:尽量不要安装在中文路径下。 配置:查看配置文件my.ini,更改其中的default-character-set=gbk(共2处),重启MySQL服务
2、。 安装MySQL-Front,8,使用MySQL-Front,双击启动MySQL-Front。 添加会话,9,10,11,点击“确定”按钮。 在“帮助”菜单中,选择“登记”,输入注册信息。 新建数据库,新建表格,插入数据,练习SQL语句。,12,7.3 使用JDBC访问数据库,13,7.3.1 JDBC简介,JDBC(Java Database Connectivity)是一组用来按照统一方式访问数据库的API。 它向程序员提供了独立于数据库的统一接口,可以使开发人员不必考虑所用的特定数据库便可编写应用程序,实现了Java与数据库的互连。 它能够: 提供对数据库的跨平台存取 无需知道数据库具
3、体的位置 无需要知道数据库实现的具体细节,14,15,JDBC驱动程序类型,16,TYPE 1,TYPE 1驱动程序: 是JDBCODBC桥连接方式 通常运行在Windows系统上 需要在客户机上安装ODBC驱动程序,17,TYPE 2,TYPE 2驱动程序: 需要在客户机上安装所用数据对应的本地驱动(这些驱动通常是C或C+语言所编写的)。 该驱动将JDBC对数据库的调用转换成数据库本地的API调用,18,TYPE 3,19,TYPE 3,网络服务可以采用多种技术来提高系统性能,这些服务包括: 负载均衡 缓存技术 连接池技术 容错机制,20,TYPE 4,TYPE 4是一种纯Java的驱动实现
4、,他不需要任何客户端配置。 这也是最为常见的数据库连接方式。,21,7.3.2 配置JDBC驱动,需要将所使用数据库的驱动程序配置到Web应用的WEB-INF/lib目录下或者Tomcat服务器的common/lib下,22,7.3.3 JDBC API,23,DriverManager,DriverManager类 DriverManager(驱动程序管理器)类负责管理JDBC驱动程序。在使用JDBC驱动程序之前,必须先将驱动程序加载并向DriverManager注册后才可使用,在程序中可以通过调用Class.forName()方法来完成。 常用方法如下: Public static syn
5、chronized Connection getConnection(String url,String user,String password) throws SQLException 获得url对应数据库的一个连接 Public static void setLoginTimeout(int seconds) 设置要进行数据库登录时驱动程序等待的延迟时间,24,Connection,Connection接口 Connection对象是通过DriverManager.getConnection()方法获得,代表与数据库的连接,也就是在已经加载的驱动程序和数据库之间建立连接。Connecti
6、on接口是JSP编程中使用最频繁的接口之一,读者一定要掌握它的使用。 常用方法如下: Statement createStatement() throws SQLException 创建一个Statement对象 PrepareStatement prepareStatement(String sql) throws SQLException 创建一个Preparestatement对象,并能把SQL语句提交到数据库进行预编译 void setAutoCommit(Boolean autocommit) throws SQLException 设置事务提交的模式 void commit() t
7、hrows SQLException 提交对数据库的更改,使更改生效 void rollback() throws SQLException 放弃当前事务开始以来对数据库所作的修改,25,Statement,Statement接口 Statement用来执行静态SQL语句。例如,执行insert、update、delete语句,可以调用executeUpdate(String sql)方法,执行select语句可以调用executeQuery(String sql)方法,该方法返回ResultSet对象。 常用方法如下: ResultSet executeQuery(String sql) t
8、hrows SQLException 执行一个查询语句并返回结果集 int executeUpdate(String sql) throws SQLException 执行更新操作,返回更新的行数 Boolean execute(String sql) throws SQLException 执行更新或查询语句,返回是否有结果集,26,PreparedStatement,PreparedStatement接口 PreparedStatement接口继承Statement接口,作为提高性能的一条措施,PreparedStatement提供了可以与查询信息一起预编译的一种语句类型。,27,Call
9、ableStatement,CallableStatement是JDBC用来调用数据库中存储过程的机制 具体的使用和PreparedStatement相似 需要注意的是:要调用的存储过程必须在数据库中存在,否则将抛出异常,28,ResultSet,ResultSet接口 在Statement执行SQL查询语句时,会返回ResultSet查询结果记录集。ResultSet接口提供了逐行访问这些记录的方法。 常用方法如下: Boolean next() throws SQLException 把当前指针定位到下一行。注意,最初,ResultSet的指针位于第一行之前。 void close() t
10、hrows SQLException 释放ResultSet对象资源 ResultSet提供了getXXX()方法,用于获取当前行中某列的值,其中“XXX”与列的数据类型有关,例如,如要获取的列是String类型,则使用getString()方法获取该列的值。getXXX()方法如下所示: getString() getInt() getFloat() getDouble() getDate() getBoolean(),29,30,7.3.4 连接数据库的典型步骤,第一步:加载正确的数据库驱动程序 为什么要加载 如何加载 Class.forName(“com.MySQL.jdbc.Drive
11、r”); DriverManager.registerDriver( new com.MySQL.jdbc.Driver(); 经过以上其中之一语句的声明后,驱动程序就会自动地加载。 注意:如果classpath路径中没有找到所需的驱动程序则会抛出 ClassNotFoundException异常。,31,第二步,定义所要连接数据库的地址 String ODBCURL“jdbc:odbc:dbName”; String oracleURL= jdbc:oracle:thin:host:port:dbName“; String mysqlURL= jdbc:mysql:/ host:port/d
12、bName“; String sqlURL“jdbc:microsoft:sqlserver:/host:1433;DatabaseName=dbName”; 通过此步骤,定义要连接的数据库资源 不同数据库连接的地址不同,这点需要特别注意,对弈一些常见的数据库连接地址,要求大家能够掌握。 URL由3部分组成,各个部分用冒号间隔,格式如下:jdbc: JDBC URL的3部分可分解如下: jdbc:JDBC中的协议就是jdbc。 :数据库驱动程序名或数据库连接机制的名称。子协议的典型示例为mysql,它用于连接mysql数据库。 :一种标记数据库的方法。子名称根据子协议的不同而不同,使用子名称的
13、目的是为定位数据库 例如 jdbc:mysql:/localhost:3306/mytest,32,第三步,建立与数据库的连接 String username = “root; String password = “root; Connection connection = DriverManager.getConnection(mysqlURL, username,password);,33,第四步,创建语句对象 Statement statement = connection.createStatement(); 第五步,声明SQL语句,并将该语句通过Statement对象提交给服务器进行
14、执行。 Stringsql= “SELECT * FROM myuser”; ResultSet resultSet=statement.executeQuery(sql); 该语句将sql命令提交给数据库服务器进行执行,并将执行结果存储在ResultSet对象中进行执行。,34,Statement接口主要有如下三个方法: 1. ResultSet executeQuery(String sql) 用于执行查询语句,返回 ResultSet结果集(一个二维表) 2. int executeUpdate(String sql) 用于执行添加、删除或修改操作,返回被更新记录的条数 3. boole
15、an execute(String sql) 执行参数部分的SQL语句; 当SQL语句的执行结果是一个ResultSet结果集时,本方法返回true;并可以通过StatementgetResultSet()方法得到返回的结果集 当SQL语句执行后没有返回的结果集时,该方法返回false,35,第六步:对查询结果进行分析 while(resultSet.next() name =resultSet.getString(1); phone =resultSet.getString(2); System.out.println(name+,+phone); 针对不同的类型调用不同的getXxx方法(
16、getString(col), getDate(col), ) 通过指定列名或相对顺序的方式调用getXxx()方法对应列的内容获取出来(getString(String) 对结果集中的内容进行修改(updateString(col,val), ) 可以通过(first(), last(), previous(), next(), absolute(int), ) 方法浏览可滚动结果集中的内容 支持多个结果集,36,Java数据类型和SQL数据类型之间的映射关系,37,第七步,关闭打开的资源 resultSet.close(); statement.close(); connection.cl
17、ose(); 将打开的资源关闭。 注意:资源关闭的顺序和打开的顺序恰恰相反。,38,1).需要把MySQL的驱动程序mysql-connector-java-5.0.4-bin.jar部署到“/WEB-INF/lib/”下。(MySQL驱动程序可以从其官方网站上下载),7.3.5 连接MySQL数据库,39,2). 注册驱动程序和获取连接的语句变为: Class.forName(com.mysql.jdbc.Driver); Connection con = DriverManager.getConnection (jdbc:mysql:/ip:port/sid,Login,password)
18、;,密码,用户名,数据库名,IP地址,端口号,连接MySQL数据库,40,例: ,MySQL数据库编程实例,41,7.3.6 JDBC-ODBC桥编程实例(Access数据库),创建Access数据库student,表info,字段id(整型),username(文本),pass(文本),name(文本),age(整型) 具体步骤: 建立ODBC数据源 使用JDBC-ODBC驱动建立数据库连接 插入/增加两条记录 修改一条记录 删除一条记录 查询所有记录,42,info表结构,43,建立ODBC数据源,控制面板管理工具数据源 (ODBC)系统DSN添加Microsoft Access Driv
19、er(*.mdb)数据源名student,选择刚才所创建的数据库,44,程序代码增加, ,45,程序代码修改, ,46,程序代码删除, ,47,程序代码查询, ); rs.close(); stmt.close(); con.close(); %,48,7.3.7 JDBC访问Oracle数据库,打开Oracle的“企业管理器”,为scott用户添加DBA权限。然后在scott中建立一个表table1,该表的结构包括三个字段:name(varchar2)、sex(varchar2)、score(number)。 创建成功后,在该表中插入几条测试数据: 分别为: aaam66 bbbm73 cc
20、cf91 dddm85,49,部署Oracle驱动程序,在 “Oracle安装目录/jdbc/lib/” 下找到所需的驱动程序classes12.jar,并将其拷贝到当前应用的 “/WEB-INF/lib” 目录下 然后重新启动tomcat服务,50, ); rs.close(); stmt.close(); con.close(); %,51,连接SQL Server数据库同样和连接Oracle数据库相似。有两个地方需要注意一下 1). 需要把SQL Server的驱动程序 mssqlserver.jar msbase.jar msutil.jar 部署到“/WEB-INF/lib/”下。(
21、SQL Server的驱动程序可以从微软的官方网站上下载),7.3.8 连接SQL Server数据库,52,2). 注册驱动程序和获取连接的语句变为: Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); Connection con = DriverManager.getConnection (jdbc:sqlserver:/ip:port;databasename=sid,Login,password);,密码,用户名,数据库名,IP地址,端口号,连接SQL Server数据库,53,例: ,SQL Server数据库编
22、程实例,54,补充:高级编程部分,在该部分,你将学习到: 事务的概念 使用批处理更新 使用PreparedStatement对象 使用CallableStatement对象 处理可滚动的结果集 处理多个结果集 处理元数据 处理BLOB和CLOB 使用事务隔离,55,事务,事务可以将一组SQL语句组成原子操作以保证数据的完整性 默认情况下,JDBC使用auto-commit事务模型 一个使用commit和rollabck的示例: Connection con = null; try Class.forName(COM.cloudscape.core.JDBCDriver); con=Driver
23、Manager.getConnection( jdbc:cloudscape:c:/PhoneBook); con.setAutoCommit(false); Statement statement = connection.createStatement(); statement.executeUpdate(“UPDATE .”);. mit(); catch(Exception e) if(null != con) con.rollback(); .,56,批处理更新,批处理更新是同时执行多个语句的机制。 要执行批处理,需要: 按照正常的方式创建一个语句对象 向语句对象中添加多个要执行的S
24、QL语句 执行批处理 示例: Statement stmt = connection.createStatement(); stmt.addBatch(insert into test values(. . .); stmt.addBatch(insert into test values(. . .); . . . stmt.executeBatch();,57,PreparedStatement,PreparedStatement 就是带有占位符的SQL 语句 数据库对他们事先进行编译,因此,客户端需要做的只是传送占位符位置所需要的数据。 而普通Statement的SQL语句,只有在程序运
25、行时才对他们进行编译 因此PreparedStatement运行的速度更快。,58,PreparedStatement,示例1: PreparedStatement stmt = connection.prepareStatement( insert into test values(?,?); stmt.setString(1,”first value”); stmt.setString(2,”second value”); stmt.executeUpdate(); stmt.setString(2,”new record, with different second value”); s
26、tmt.executeUpdate();,59,PreparedStatement,示例2: Connection connection =DriverManager.getConnection(url, user, password); PreparedStatement statement =connection.prepareStatement(UPDATE employees +SET salary = ? +WHERE id = ?); intnewSalaries=getSalaries(); intemployeeIDs=getIDs(); for(inti=0; iemploy
27、eeIDs.length; i+) statement.setInt(1,newSalariesi); statement.setInt(2,employeeIDsi); statement.executeUpdate();,60,CallableStatement,CallableStatement是JDBC用来调用数据库中存储过程的机制 具体的使用和PreparedStatement相似 需要注意的是:要调用的存储过程必须在数据库中存在,否则将抛出异常 示例: CallableStatement stmt=connection.prepareCall( “ CALL GET_BOOKS(?
28、,?) ); stmt.setString(1,”first value”); stmt.setString(2,”second value”); ResultSet books = stmt.execute();,61,可滚动的结果集,可滚动结果集是允许你在结果集中的不同行之间进行任意浏览的ResultSet对象。 具体的操纵方式包括: 使用next()和previous()分别向后和向前跳一行 使用first()或last()方法直接跳到结果集中的第一行或最后一行。 使用absolute(int)方法直接跳到结果集中指定的行 使用relative(int)方法向前或向后跳转指定的行数 此外
29、,你还可以使用其他方法: beforeFirst(), afterLast():将游标置于第一行之前或最后一行之后。 isFirst(), isLast(), isBeforeFirst(), isAfterLast(): 告诉你游标是否指向指定的位置。 而beforeFirst() and afterLast()方法告诉你是否还有更多的数据需要处理。,62,示例: Statement stmt = connection.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSe
30、t books = stmt.executeQuery(“SELECT * FROM Books”); if(books.last() /this scrolls from the end backwards do /do something with this row while(books.previous() 为了使创建的结果集具有可滚动性,在创建Statement对象时需要使用指定的构建函数,该构建函数需要指定两个参数: 支持滚动 ResultSet.TYPE_FORWARD_ONLY (不支持滚动) ResultSet.TYPE_SCROLL_SENSITIVE (支持滚动,当更新时
31、,及时更新结果集中的内容) ResultSet.TYPE_SCROLL_INSENSITIVE (支持滚动,但当数据更新时,并不在本结果集中体现) 支持并发 ResultSet.CONCUR_READ_ONLY (禁用更新) ResultSet.CONCUR_UPDATABLE (允许更新),63,多个结果集,批处理和CallableStatement可能返回多个结果集 你可以使用getResultSet()和getMoreResults()来对结果进行检索 示例: stmt.addBatch(.); . stmt.executeBatch(); do isAnUpdate=false; if
32、(stmt.getUpdateCount() != -1) isAnUpdate=true; /the operation was an update, skip else ResultSet rs = stmt.getResultSet(); /. do something with results while(stmt.getMoreResults() | isAnUpdate); /loop if more results or last operation was an update,64,处理元数据,元数据可以提供一些关于数据库结果的一些信息: 数据库本身的信息 DatabaseMetaData dbmd = connection.getMetaData(); 单表的信息 ResultSet tableRS = connection.getMetaDa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 劳动合同法在企业的实施调查报告(2025年版)
- 2025年股权转让框架协议
- 2025年离婚协议书两个小孩模板
- 【单元重点难点】译林版(三起)英语三年级上册Unit-7-单元复习(知识梳理检测)-(含解析)
- 2025年河北省邢台市单招职业适应性测试题库学生专用
- 2024年运载火箭遥测系统检测设备项目资金需求报告代可行性研究报告
- 第九章 第2节 液体的压强(教学设计)2024-2025学年人教版(2024)物理八年级下册
- 2025年海口市单招职业倾向性测试题库参考答案
- 2025年广东省外语艺术职业学院单招职业适应性测试题库一套
- 《小数除法-谁打电话时间长》(教学设计)-2024-2025学年五年级上册数学北师大版
- 2025年黑龙江交通职业技术学院单招职业技能测试题库必考题
- 2024-2025学年山东省潍坊市高三上学期1月期末英语试题
- 2025-2030年中国青海省旅游行业市场现状调查及发展趋向研判报告
- 人力资源部门2023年度招聘效果分析
- 八年级数学下册 第1章 单元综合测试卷(北师版 2025年春)
- 舞蹈艺术赏析课件
- 2025年春新外研版(三起)英语三年级下册课件 Unit1第1课时Startup
- 2025年安徽碳鑫科技有限公司招聘笔试参考题库含答案解析
- 2025广东珠海高新区科技产业局招聘专员1人历年高频重点提升(共500题)附带答案详解
- 数学-福建省泉州市2024-2025学年高三上学期质量监测(二)试卷和答案(泉州二模)
- 员工行为守则及职业道德规范
评论
0/150
提交评论