数据库系统实验 (4).pdf

上传人:奉*** 文档编号:4059397 上传时间:2021-01-13 格式:PDF 页数:37 大小:1.03MB
返回 下载 相关 举报
数据库系统实验 (4).pdf_第1页
第1页 / 共37页
数据库系统实验 (4).pdf_第2页
第2页 / 共37页
点击查看更多>>
资源描述

《数据库系统实验 (4).pdf》由会员分享,可在线阅读,更多相关《数据库系统实验 (4).pdf(37页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、实验(第九周) JDBC编程和PL/pgSQL函数 主要内容 JDBC编程 Java环境配置 Java应用访问数据库 PL/pgSQL函数 程序的基本结构 基本语法 函数的编写 主要内容 JDBC编程 Java环境配置 Java应用访问数据库 PL/pgSQL函数 程序的基本结构 基本语法 函数的编写 Java环境配置 Eclipse开发平台 jdkjava的开发工具集 jrejava程序的运行环境 查看是否已安装好查看是否已安装好jdk和和jre (java) cmd输入输入 java version 1. Eclipse安装 Eclipse官网下载(32位/64位) 解压缩即安装成功 2.

2、 jdk和jre(java)的安装 oracle官网下载jdk 下载的jdk里面必然含有jre,安装上jdk就不需要不需要再 安装单独的jre 安装 它会要求你选择两次两次安装路径,第一次是jdk,第 二次是jre 注意:jdk和jre要放在同一个安装目录下 2. jdk和jre(java)的安装 配置环境变量 我的电脑,右键“属性”-“高级”-“环境变 量”-“系统变量” 系统变量 - 新建 - JAVA_HOME 变量 (变量值为jdk安装目录,注意最后不加分号) 2. jdk和jre(java)的安装 配置环境变量 系统变量-找到Path变量-编辑 在变量值最后输入(按照自己的安装目录更

3、改): D:ProgramJavajdkbin;D:ProgramJavajrebin; (注意原来Path的变量值末尾有没有分号,如果没 有,先输入分号再输入上面的代码) 2. jdk和jre(java)的安装 配置环境变量 2. jdk和jre(java)的安装 配置环境变量 系统变量 - 新建 CLASSPATH 变量 变量值填写: .;%JAVA_HOME%lib;%JAVA_HOME%libtools.jar (注意最前面有一点) 2. jdk和jre(java)的安装 配置环境变量 检查是否已安装好jdk和jre (java) cmd输入 java version 安装完毕! Ja

4、va应用访问数据库新建工程 新建java projecttest 在test目录下新建lib文件夹 将pg驱动文件 postgresql-42.2.5.jar复制过来 Java应用访问数据库新建工程 右击test - Build Path libraries add external JARs 添 加postgresql-42.2.5.jar Java应用访问数据库编写程序 新建class文件 在这个文件中编写程序,连接数据库,增删改查 JDBC应用程序 (1)加载JDBC驱动程序 (2)建立与数据库的连接 (3)进行数据库的访问 (4)关闭相关连接 Java应用访问数据库编写程序 conne

5、ct_pg.java package test; / java项目名字 public class connect_pg / class名 public static void main(String args) / TODO Auto-generated method stub Java应用访问数据库连接数据库 try Class.forName(org.postgresql.Driver); Connection con=DriverManager.getConnection (jdbc:postgresql:/localhost:5432/test,postgres,123 456); /

6、实际工作 con.close(); catch (Exception e) / TODO Auto-generated catch block e.printStackTrace(); 要连接的数 据库名字 加载驱动器类 关闭数据库连接 Java应用访问数据库创建表 String sql_create=create table eee(eeid int primary key, eeage int,dep_id int); try Class.forName(org.postgresql.Driver); Connection con = DriverManage .getConnection

7、 (jdbc:postgresql:/localhost:5432/test, postgres, 123456“); Statement stmt=con.createStatement(); stmt.executeUpdate(sql_create); System.out.println(数据表创建成功); stmt.close(); con.close(); catch (Exception e) / TODO Auto-generated catch block e.printStackTrace(); 通过 connection对 象创建SQL语 句执行对象 关键1:sql语句

8、关键2:sql语 句的执行 Java应用访问数据库插入数据 String sql_insert=insert into eee select num,floor(random()*10+15),floor(random()*30+1000) from generate_series(1,100) as t(num); try Class.forName(org.postgresql.Driver); Connection con = DriverManage .getConnection (jdbc:postgresql:/localhost:5432/test, postgres, 1234

9、56“); Statement stmt=con.createStatement(); stmt.executeUpdate(sql_insert); System.out.println(插入数据完成); stmt.close(); con.close(); catch (Exception e) / TODO Auto-generated catch block e.printStackTrace(); 随机生成100条测试数据, eeid为1100,不重复, eeage在1524之间,可重复, dep_id在10001029之间,可重复 Java应用访问数据库预备语句 String sq

10、l_insert2=insert into eee values(?,?,?); PreparedStatement pstmt=con.prepareStatement(sql_insert2); pstmt.setInt(1, 101); pstmt.setInt(2, 20); pstmt.setInt(3, 1001); pstmt.executeUpdate(); pstmt.close(); 设置参数 Java应用访问数据库查询 String sql_select=select * from eee where eeid10; try Class.forName(org.postg

11、resql.Driver); Connection con = DriverManage .getConnection (jdbc:postgresql:/localhost:5432/test, postgres, 123456“); Statement stmt=con.createStatement(); ResultSet re=stmt.executeQuery(sql_select); while(re.next() int id=re.getInt(eeid); int age=re.getInt(eeage); int did=re.getInt(dep_id); System

12、.out.println(eeid:+id+teeage:+age+tdep_id:+did); re.close(); stmt.close(); con.close(); catch (Exception e) / TODO Auto-generated catch block e.printStackTrace(); 主要内容 JDBC编程 Java环境配置 Java应用访问数据库 PL/pgSQL函数 程序的基本结构 基本语法 函数的编写 与基础sql的区别 基础sql:前几节课的内容(create, select,) PL/pgSQL除了基础sql语句,还包含了程序化程序化 的元素,

13、 比如在PL/pgSQL中可以使用if/then/else语句和循环 功能。 可以轻松地执行SQL语句,甚至对SQL语句的结果 进行循环操作 为什么在服务器中进行程序设计 从一个简单的例子开始 需要实现:互换考生A和考生B的院系号 简单的sql语句 要确保有id号为A的考生,还要确保有id号为 B的考生,然后再分别更新A、B的院系号。 都用sql语句来确认,很麻烦! 程序设计的方法就可以使得这些工作更加容 易管理、更加安全和更加强健。 可以把计算、核对和数据操作全部放在一个 用户定义的函数里面。 用户直接调用函数即可。 为什么在服务器中进行程序设计 程序的基本结构 create or repl

14、ace function example(id varchar, name varchar) returns varchar as $ * begin * end; $ language plpgsql; 4 编程语言 1 函数声明 3 主体部分 变量声明,定义 编程 2 函数返回值类型 思考:思考: create create or replace 基本语法 变量定义: PL/pgSQL可以使用pgSQL中的所有数据类型来声明 变量。 Declare age int; 变量赋值: temp:=age; 如何把查询结果的值(单个结果)赋给变量 Select eeage from eee whe

15、re eeid=2; Select eeage into age from eee where erid=2; 注意:不是 int age ! 以分号结尾 例子1 加法函数 要求:要求:创建一个函数,计算整数a与b的和, 并返回计算结果。 变量个数,变量类型, 返回值类型 例子1 加法函数 create function add(a int,b int) returns int as $ declare sum int; begin select a+b into sum; return sum; end; $ language plpgsql; 调用函数: select add(2,3);

16、思考:思考:还可以 怎么写? 例子2 加法函数2 要求:要求:创建一个函数,将eee表中所有考生 年龄加2,,并返回考生人数。 变量个数,变量类型, 返回值类型 例子2 加法函数2 create function set_age(i_age int) returns int as $ begin update eee set eeage=eeage+i_age; return (select count(eeid) from eee); end; $ language plpgsql; 调用函数: select set_age(2); 例子2 加法函数2 create function set

17、_age(i_age int) returns int as $ begin update eee set eeage=eeage+i_age; return (select count(eeid) from eee); end; $ language plpgsql; 调用函数: select set_age(2); 思考:思考:如果返回的不是 单个结果,而是一个数 据集呢? 例子2 加法函数2 create function set_age(i_age int) returns int as $ begin update eee set eeage=eeage+i_age; return

18、(select count(eeid) from eee); end; $ language plpgsql; returns setof eee return query select * from eee; 删除函数: drop function set_age(int); 例子3 互换考生A和考生B的院系号 分析: 考生A是否存在.考生A不存在 考生B是否存在.考生B不存在 .操作成功 输入:ida int, idb int 函数:swap(ida int, idb int) 返回类型:returns text create function swap(ida int, idb int)

19、 returns text as $ declare dep_a int; declare dep_b int; begin select dep_id into dep_a from eee where eeid=ida; if not found then return 考生A不存在; end if; select dep_id into dep_b from eee where eeid=idb; if not found then return 考生B不存在; end if; update eee set dep_id=dep_b where eeid=ida; update eee

20、set dep_id=dep_a where eeid=idb; return 操作成功; end; $ language plpgsql; 判断考生A、B是 否存在 更新考生A、B 的院系号 综合例子 创建一个PL/pgSQL函数,返回考生表中平均 年龄最大的院系号和相应的平均年龄,并通 过java程序调用。 综合例子 create or replace function sele() returns table(did int,age numeric) as $ begin return query (with tt(did,avg_age) as (select dep_id,avg(eeage) from eee group by dep_id) select * from tt where avg_age=(select max(avg_age) from tt); end; $ language plpgsql; 综合例子 思考:如果不使用嵌套呢?

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com