java基础学习第10章.ppt

上传人:xin****828 文档编号:14601300 上传时间:2020-07-25 格式:PPT 页数:71 大小:815KB
收藏 版权申诉 举报 下载
java基础学习第10章.ppt_第1页
第1页 / 共71页
java基础学习第10章.ppt_第2页
第2页 / 共71页
java基础学习第10章.ppt_第3页
第3页 / 共71页
资源描述:

《java基础学习第10章.ppt》由会员分享,可在线阅读,更多相关《java基础学习第10章.ppt(71页珍藏版)》请在装配图网上搜索。

1、第15章Java数据库连接(JDBC),2,课程的教学目标,数据库基础 通过学习本章使学生能够熟悉通过JDBC 进行访问数据库 设置环境 建立连接 执行带有参数的SQL语句,对数据库进行操作,3,JDBC概述,什么是JDBC?,JDBC (Java Database Connection)是为Java语言定义的一个SQL调用级的数据库编程接口。其主要由两部分组成 JDBC API(JDBC API, JDBC Driver API) JDBC驱动程序管理器 JDBC能完成3件事: 与一个数据库建立连接 向数据库发送SQL语句 处理数据库返回的结果,4,JDBC API 是一组由Java语言编写

2、的类和接口,包含在java.sql和javax.sql两个包中 java.sql为核心包,这个包包含于J2SE中 javax.sql包扩展了JDBC API的功能,成为了J2EE的一个基本组成部分 可分为两个层次 面向程序员的JDBC API 负责应用程序与JDBC Manager之间的通信 面向底层的JDBC Driver API 负责JDBC Manager与数据库驱动程序具体实现之间的通信,5,应用程序通过JDBC API和底层的JDBC Driver API打交道,通过JDBC访问数据库(续) JDBC API的体系结构,负责应用程序与JDBC Manager之间的通信,负责JDBC

3、Manager与数据库驱动程序具体实现之间的通信,复责载入相应的驱动,6,说明 要通过JDBC来存取某一特定的数据库,必须有相应的JDBC driver,它往往是由生产数据库的厂家提供,是连接JDBC API(类和接口)与具体数据库之间的桥梁。 四种驱动:纯JDBC驱动、JDBCODBC驱动、DBMS提供的本机JavaAPI、其它 Java程序首先使用JDBC API来与JDBC Driver Manager交互,由JDBC Driver Manager载入指定的JDBC drivers, 以后就可以通过JDBC API来存取数据库。,7,什么是ODBC?,ODBC是一个C语言实现的访问数据库

4、API 对没有提供JDBC驱动的数据库,使用JDBC-ODBC桥来数据库是常用的方法(通过ODBC驱动器提供数据库连接) 通过ODBC API,应用程序可以存取保存在多种不 同数据库管理系统(DBMS)中的数据,而不论 每个DBMS使用了何种数据存储格式和编程接口,8,9,JDBC API提供的重要接口,java.sql.DriverManager 处理驱动的调入并且对产生新的数据库连接提供支持。 java.sql.Connection 代表对特定数据库的连接。 java.sql.Statement 对一个特定的数据库执行SQL语句。 java.sql.ResultSet 控制对一个特定语句的

5、行数据的存取。,10,一个基本的JDBC程序开发包含如下步骤 设置环境,引入相应的JDBC类(数据源配置、import) 选择合适的JDBC驱动程序并加载(forName()) 分配一个Connection对象 分配一个Statement对象 用该Statement对象进行查询等操作 从返回的ResultSet对象中获取相应的数据 关闭Connection,通过JDBC访问数据库 JDBC程序开发步骤,11,15.1 创建数据源,JDBC连接数据库的方式:,使用JDBCODBC Bridge(桥接器), 使用某种数据库的专用驱动程序,12,(1)确定数据源名称和说明(使用JDBCODBC桥接器

6、时需要),13,(2) 数据源的安装:,14,(3)设置“高级”属性:,15,通过JDBC-ODBC桥访问数据库 安装 Java 和 JDBC API 安装JDK的同时就自动安装了 安装数据库驱动程序 安装JDK的同时就自动安装了安装JDBC-ODBC桥驱动程序 JDBC的类和方法都包含在java.sql包中,Java数据库应用程序的设计都需要引入java.sql包。,15.2 JDBC-ODBC桥接器,16,(1)建立JDBC-ODBC桥接器(装载驱动程序),首先使用Class类的forName方法来装载驱动程序。装载驱动程序要处理异常。 两种装载驱动程序的方法如下:,17,try Clas

7、s.forName(sun.jdbc.odbc. JdbcOdbcDriver); catch(java.lang.ClassNotFoundException e) System.out.println(类未找到错误!+e); ,使用JDBC-ODBC桥接器的例:,通过forName()加载sun.jdbc.odbc包中的 JDBCOdbcDriver类来建立JDBC-ODBC 桥接器,18,try Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver ); catch(java.lang.ClassNotFoundExcept

8、ion e) System.out.println(类未找到错误!+e); ,使用专用驱动程序的例:,19,使用专用驱动程序的例:,Connection con= DriverManager. getConnection (jdbc:microsoft:sqlserver: /127.0.0.1:1433; DatabaseName=学生信息管理系统, user,pass);,访问远程服务器上的数据库: /主机名:端口/数据库,20,(2) 连接到数据库,Connection con = DriverManager.getConnection (jdbc:odbc:PINF,“ ,“ );,C

9、onnection con = DriverManager.getConnection (“jdbc:odbc:数据源名称, “login,“PWD);,Connection是一个接口,表示与指定数据库的连接. DriverManager类位于JDBC的管理层, 作用于用户 和驱动程序之间,负责跟踪一个系统可用的JDBC 驱动程序,并在数据库与相应的驱动程序之间建立 连接.,如果不配数据源,可直接跟数据库存放路径 jdbc:odbc:Driver=Microsoft Access Driver (*.mdb);DBQ=c:/data/test.mdb,21,1. 创建 Statement 对象

10、 建立了到特定数据库的连接之后,就可用该连接发送 SQL 语句。Statement 对象用 Connection 的方法 createStatement 创建。,try Statement stmt = con.createStatement(); Catch(SQLException e),(3) 向数据库发送SQL语句,22,方法 executeQuery 用于产生单个结果集的语句,例如 SELECT 语句。,2. 使用 Statement 对象执行语句,ResultSet rs=stmt.executeQuery( Select *From Person);,23,方法 executeU

11、pdate 用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句 。,String SQLOrder=“insert into Person values(+ID+,+name+,+DepID+,+Occupation+,+salary+,+EduID+)”; stmt.executeUpdate(SQLOrder);,24,(4)对执行SQL语句的结果进行处理, ResultSet类负责存储查询数据库的结果;并提供一系列的方法对数据库进行新增、删除和修改操作。,负责维护一个记录指针(Cursor),记录指针指向数据表中的某个记录,通过适当的移动

12、记录指针,可以随心所欲的存取数据库,加强程序的效率。,25,顺序查询(ResultSet),使用结果集ResultSet的next()方法,可以顺序的查询。 一个结果集将游标最初定位在第一行的前面,第一次调用next()方法使游标移动到第一行。next()方法返回一个boolean型数据,当游标移动到最后一行之后返回false。 使用getXXX()获得字段值 getXXX(int columnIndex) getXXX(String conumnName) ResultSet rs=sql.executeQuery(SELECT * FROM chengjibiao); while(rs.n

13、ext() 注意:使用getXXX()查看一行记录时,不能颠倒字段的顺序。 例如,不可以:getInt(5); getInt(4); 例子: Example15_1.java,26,可滚动结果集,为了显示结果集指定的一条记录,有时需要在结果集中前后移动; 为了得到一个可滚动的结果集,必须使用下述方法先获得一个Statement对象: Statement stmt=con.createStatement (int type ,int concurrency); 根据参数的type、concurrency的取值情况,stmt返回相应类型的结果集: ResultSet re=stmt.execute

14、Query(SQL语句);,27,type的取值决定滚动方式,取值情况如下: ResultSet.TYPE_FORWORD_ONLY 结果集的游标只能向下滚动。 ResultSet.TYPE_SCROLL_INSENSITIVE 结果集的游标可以上下移动,当数据库变化时,当前结果集不变。 ResultSet.TYPE_SCROLL_SENSITIVE 返回可滚动的结果集,当数据库变化时,当前结果集同步改变。,28,Concurrency 取值决定是否可以用结果集更新数据库,Concurrency取值: ResultSet.CONCUR_READ_ONLY 不能用结果集更新数据库中的表。 Res

15、ultSet.CONCUR_UPDATETABLE 能用结果集更新数据库中的表。 ResultSet的相关方法见,29,public boolean previous():将游标向上移动,移动到结果集第一行之前时返回false public beforeFirst(), isBeforeFirst() public afterLast(), isAfterLast() public first(), isFirst() public last(), isLast() public int getRow()得到游标所指行的行号 public boolean absolute(int row)将游

16、标移动到参数row指定的行号,30,排序查询,可以在SQL语句中使用ORDER BY子语句,对记录排序 . sql=con.createStatement(); String condition=SELECT name,english FROM chengjibiao ORDER BY english; rs=sql.executeQuery(condition); 例子: Example15_4.java,31,模糊查询,可以用SQL语句操作符LIKE进行模式般配,使用“%”代替0个或多个字符,用一个下划线“_”代替1个字符。比如,下述语句查询姓氏是“王”的记录: rs=sql.execut

17、eQuery (SELECT * FROM students WHERE 姓名 LIKE 王% );,32,随机查询,用Math类的静态方法random()可以产生一个大于0小于1的随机数,再用下述公式: int i=(int)(Math.random()*number); 产生一个0到number之间的随机数,根据这个随机数将游标移动到相应的行,并输出该行记录.,33,更新、添加、删除记录,使用SQL语句更新(Update)、添加(Insert)、删除(Delete)记录中字段的值 Statement对象调用方法: public int executeUpdate(String sqlSta

18、tement); executeUpdate(“UPDATE chengjibiao SET math = 99 WHERE name = zhangshan”); 通过参数sqlStatement指定的方式实现对数据库表中记录的字段值的更新. 例子: Example15_7.java, Example15_8.java, Example15_9.java,34, 数据库访问结束,为保证数据库数据的 完整性和释放系统资源,应明确地关闭数据库的连接:一般是关闭结果集、关闭数据库访问对象和关闭连接。,(5) 关闭连接,35,Example,First example for creating a

19、database (createCoffees.java) Second example for inserting data into a database (insertCoffees.java) Three example for querying data from a database with GUI (DisplayQueryResults.java) Four example:workspace/basic/calcate.java, DatabaseCon.java, MyGui.java,36,预处理语句,当向数据库发送一个SQL语句,比如“Select * From ch

20、engjibiao”,数据库库中的SQL解释器负责将把SQL语句生成地层的内部命令,然后执行该命令,完成有关的数据操作。如果不断地向数据库提交SQL语句势必增加数据库中SQL解释器的负担,影响执行的速度。 如果应用程序能针对连接的数据库,事先就将SQL语句解释为数据库地层的内部命令,然后直接让数据库去执行这个命令,显然不仅减轻了数据库的负担,而且也提高了访问数据库的速度。,37,对于JDBC,如果使用Connection和某个数据库建立了连接对象con,那么 con就可以调用 prepareStatement(String sql) 方法对SQL语句进行预编译处理,生成该数据库地层的内部命令,

21、并将该命令封装在PreparedStatement对象中,那么该对象调用相应的方法都可以使得该地层的内部命令被数据库执行,38,数据源的设定(参考),数据库概述,数据库是指长期存储在计算机内,有组织、可共享的数据集合。 例如: Oracle SQL Server DB2 Access,39,例如:设在“学生”数据库中有“学生成绩”表,其 内容如表10-1所示:,40,建立一个实例数据库(以Access为例): (1) 建立空的Access数据库:,41,(2) 建立三个表:,42,43,44,45,(3) 建立联系:,46,10.1 数据库基础知识,数据管理的两个阶段 文件管理 各种数据都是以

22、文件为单位存储在外存,且由操作系统统一管理 文件相对独立,文件结构不能很好地反映现实世界中事物之间的联系,文件中存在大量的数据冗余 数据库管理 以数据为中心组织数据,减少冗余,并提供更高的数据共享能力,由数据库系统进行管理 程序和数据具有较高的独立性,当数据的逻辑结构改变时,不涉及数据的物理结构,也不影响应用程序,从而降低应用程序研制与维护的费用,47,10.1.1 数据库技术的特点,数据库技术有如下一些特点 面向企业或部门,以数据为中心组织数据,形成综合性的数据库为各应用共享 采用一定的数据模型。数据模型不仅要描述数据本身的特点,而且要描述数据之间的联系 数据冗余小,易修改、易扩充。不同的应

23、用程序根据处理要求,从数据库中获取需要的数据,这样就减少了数据的重复存贮,也便于维护数据的一致性 程序和数据有较高的独立性。当数据的物理结构和逻辑结构改变时,有可能不影响或较少影响应用程序 具有良好的用户接口,用户可方便地开发和使用数据库 对数据进行统一管理和控制,提供了数据的安全性、完整性、以及并发控制,数据库基础知识,48,10.1.1 数据库技术的特点(续),应用程序访问数据库的基本模式 DBMS(数据库管理系统)是数据库的核心软件。数据库系统的各种操作,包括创建数据库对象、检索和修改数据库中的数据,都是通过DBMS实现的,数据库基础知识,49,10.1.2 数据模型,数据模型 数据库的

24、逻辑结构 所有的数据库系统都是基于某种数据模型的 不同种类的数据库可能支持不同的数据模型 关系数据库就是因为支持关系模型而得名,数据库基础知识,50,关系模型 形象地说就是二维表结构,也称之为关系表 一个关系数据库可以包含多个关系表,关系表是数据库中组织和存储数据的基本单位 每个表都用于存储面向某个主题的信息。例如: 学生表存储学生信息 系表存储各系的信息 课程表存储课程信息等 关系表每一行存储一个记录,每一列表示记录的一个属性。设计一个关系表时需要 为表命名 设计表的列结构,其中包括列名及列的数据类型,10.1.2 数据模型,数据库基础知识,51,10.1.2 数据模型,学生表 由5列组成,

25、每一列表示学生的一个属性 每个学生都是用学号、姓名、性别、出生年月及所属系的系号等属性来描述,在这些属性上的一组合法取值就对应一个学生记录(表中的一行),数据库基础知识,52,10.1.3 关系表中的主码与外来码,主码 为了保证关系表中没有重复的记录,需要为关系表定义一个主码,作用是唯一标识表中的一个记录 可以是表中的一列,也可以由几列组合而成 在建表时如果定义了主码,系统可以对输入该表的数据进行检查,要求主码不能重、也不能空(NULL) 例如在学生表中 学号可以作为主码,因为一个学号可以唯一地确定表中的一个学生记录 由于学生中有重名现象,姓名就不能用来做为主码,数据库基础知识,53,10.1

26、.3 关系表中的主码与外来码(续),外来码 现实世界中事物之间的联系反 映到数据库中就体现为表之间的联系,在关系数据库中,借助“外来码”实现存贮这种联系的信息 如果一个表中的某一列是另外一个表中的主码,那么该列称之为外来码。 例如在学生表中,“系号”就是外来码,因为系号是系表的主码,在学生表中设计了“系号”一列,就是为了存储学生和系之间的联系信息 通过外来码和主码的等值连接将不同表里的相关记录连接在一起,从而实现数据库中相关数据的查找 可以查询每个学生所在系的信息,也可以查询指定系所包含的学生信息,数据库基础知识,54,10.1.3 关系表中的主码与外来码(续),数据库基础知识,55,该数据库

27、中建有 员工基本信息表(person) 包括工作证号、姓名、部门编号、职务、工资、学历编号等字段 工作证号(ID)是该表的主码 Department列是一个外来码,匹配部门编码表中的DepID主码 Education列也是一个外来码,匹配学历编码表中的EduID主码 部门编码表(department) 保存了部门编号和部门名称 部门编号(DepID)是主码 学历编码表(education) 保存了学历编号和学历名称 学历编号(EduID)是主码,10.1.3关系表中的主码与外来码(续)员工信息管理系统(PIMS)的例子,数据库基础知识,56,10.1.3关系表中的主码与外来码(续)员工信息管理

28、系统(PIMS)的例子,数据库基础知识,57,10.1.4 建立一个实例数据库,建立数据库需要借助于数据库管理系统,不同的数据库管理系统其具体操作方法是不同的,以Windows平台上的一个简单的关系型数据库Access为例,建立一个数据库,为编写Java的数据库访问程序提供一个实例环境 1启动Office 的Microsoft Access,选择“新建一个Access数据库选项”,在文件名输入栏中输入“PMS.mdb”。该文件代表一个Access数据库,数据库基础知识,58,10.1.4 建立一个实例数据库,PMS数据库窗口出现在Access主窗口中。在数据库窗口的左侧,列出了常用的7类数据库

29、对象。当选中某对象类后,就可以在右窗口中进行有关该对象的操作,如建立、修改,运行等。7类对象的主要含义分别是: 表 关系表,可以实现的操作包括表的建立、数据的维护、查询等 查询 可以建立一个查询(视图的概念),还可以运行SQL语句 窗体 数据库应用界面,可进行简单数据库应用开发 报表 报表的制作与打印输出 页 可生成基于web页面的数据库应用界面 宏 可定义完成特定任务的操作或操作集 模块 可定义数据库中使用的公共过程与函数,数据库基础知识,59,10.1.4 建立一个实例数据库,2 在对象栏中选择“表”,再选择“使用设计器创建表”方式,单击工具栏中的“设计”按钮,就会出现表设计窗口。在该窗口

30、中可以定义字段的名称、数据类型、字段说明信息等。分别设计Person表、 Department表、Education表,数据库基础知识,60,10.1.4 建立一个实例数据库,数据库基础知识,61,10.1.4 建立一个实例数据库,3建立表之间的联系 点击主窗口“工具”菜单中的“关系”选项,打开“关系”视图 用鼠标拖动Education表的EduID属性,拉到Person表的Education属性上,在自动弹出的“编辑关系”对话框中,选择实施参照完整性,点击“创建”按钮 用同样方法建立Department表中DepID列和Person表中Department列,数据库基础知识,62,10.1.

31、4 建立一个实例数据库,4 为每个表创建数据,数据库基础知识,63,10.1.5 SQL语言简介,SQL语言 关系数据库的标准语言,从大型数据库(如Oracle)到微机数据库(如Access)都支持 可以实现对数据库的各种操作。例如 表及其他数据库对象的定义 数据的查询与数据维护 对数据库进行控制 是非过程化的语言,只需要告诉数据库做什么,而不需要描述怎么做 语句都是独立执行的,无上下文联系 本身不区分大小写,数据库基础知识,64,10.1.5 SQL语言简介(续)SQL关键字,数据库基础知识,65,在SQL语言中,对数据库中数据的操作可分为读写两种 读操作(查询)通过SELECT语句实现,该

32、语句的执行不会改变数据库中的数据 可以返回一行或多行数据 也可能没有返回结果(没有查到满足条件的记录) 涉及到写操作的语句共有3个 INSERT UPDATE DELETE,10.1.5 SQL语言简介(续) SQL语言的读/写操作,数据库基础知识,66,建表语句 定义表中各列的名称及数据类型 有关列的数据类型可参考具体数据库的语法手册 CREATE TABLE person ( id INTEGER PRIMARY KEY, /定义该列为主码 name VARCHAR(10), /列定义,字符型 department INTEGER, /列定义,整型 occupation VARCHAR(1

33、0), salary NUMBER, education INTEGER);,10.1.5 SQL语言简介(续)建表语句,数据库基础知识,67,插入语句 向指定表插入一条记录,插入的值要与表的定义匹配 插入一行数据 NSERT INTO table_name VALUES (value1, value2,.) 插入一行数据在指定的字段上 INSERT INTO table_name (column1, column2,.) VALUES (value1, value2,.) 例如在person表中插入一行 INSERT INTO person VALUES (1, 张三, 1, manager

34、, 3500, 5);,10.1.5 SQL语言简介(续)插入语句,数据库基础知识,68,修改语句 修改指定记录中某列的值,更新表中原有数据 其格式为 UPDATE table_name SET column_name = new_valueWHERE column_name = some_value 例如:将person表中id号为1的人员的工资修改为3700元 UPDATE person SET salary = 3700 /指定对哪列进行修改、如何修改 WHERE id = 1 ; /选择要修改的行,10.1.5 SQL语言简介(续)修改语句,数据库基础知识,69,删除语句 删除表中的指

35、定的数据 其格式为 DELETE FROM table_name WHERE column_name = some_value 例如删除部门号为4的员工记录 DELETE FROM person WHERE department = 4 ;,10.1.5 SQL语言简介(续)删除语句,数据库基础知识,70,查询语句 从指定表中取出指定的数据 SELECT select_list INTO new_table FROM table_source WHERE search_condition GROUP BY group_by_expression HAVING search_condition

36、ORDER BY order_expression ASC | DESC ,10.1.5 SQL语言简介(续)查询语句,数据库基础知识,71,例:查询工资大于2000的员工的姓名及职务 SELECT * / “*”号表示输出全部列的值 FROM person /指定查询的表,本查询只用到person表 WHERE salary2000 ; /查询条件 例:查询员工“张三”的学历,输出学历名 SELECT education.name FROM person , education /该查询用到两个表 WHERE person.name= 张三 AND person.education =education.eduid ;,10.1.5 SQL语言简介(续)查询语句,数据库基础知识,返回,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!