大型数据库实验报告_第1页
大型数据库实验报告_第2页
大型数据库实验报告_第3页
大型数据库实验报告_第4页
大型数据库实验报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中南大学大型数据库实验报告课程名称大型数据库技术指导教师姓名学号专业班级《大型数据库技术》实验三写一个PROC程序,查询并显示表Agents的所有记录。要求定义一个数组类型的宿主变量,一次性把所有记录从服务器端传送到客户端,然后逐行显示。Java代码如下: publicvoidselectAgents()throwsException{ Connectionconn=this.getConnection(); Statementstmnt=conn.createStatement(); ResultSetset=stmnt.executeQuery("select*fromAgents"); System.out.println("查询结果如下:\n"); while(set.next()){ Stringid=set.getString("AID"); Stringname=set.getString("ANAME"); Stringcity=set.getString("CITY"); intpercent=set.getInt("PERCENT"); System.out.println("aid:"+id+"aname:"+name+"city:"+city+"percent:"+percent); } set.close(); stmnt.close(); conn.close(); }测试代码: publicstaticvoidmain(String[]args)throwsException{ Stringurl="jdbc:oracle:thin:@localhost:1521:ORCL"; Stringuser="jelly"; Stringpwd="csusoft"; DBOpersdb=newDBOpers(url,user,pwd); db.selectAgents(); }测试结果:写一个PROC程序,根据用户输入的城市,查询并逐行显示该城市所有顾客的编号、名称和折扣。如果该城市中不存在任何顾客,则调用一个错误处理函数,函数中显示错误信息:“该城市中不存在顾客”。Java代码如下: publicvoidselectCustomerByCity(Stringcity)throwsException{ Connectionconn=this.getConnection(); Statementstmnt=conn.createStatement(); ResultSetset=stmnt .executeQuery("select*fromCustomerswherecity='"+city +"'"); booleanisEmpty=true; System.out.println("查询结果如下:"); while(set.next()){ Stringcid=set.getString("CID"); Stringcname=set.getString("CNAME"); doublediscnt=set.getDouble("DISCNT"); Stringct=set.getString("CITY"); System.out.println("cid:"+cid+"cname:"+cname+"discnt:" +discnt+"city:"+ct); isEmpty=false; } if(isEmpty){ System.out.println("该城市不存在客户。"); } set.close(); stmnt.close(); conn.close(); }测试代码:(查询在Duluth的用户) publicstaticvoidmain(String[]args)throwsException{ Stringurl="jdbc:oracle:thin:@localhost:1521:ORCL"; Stringuser="jelly"; Stringpwd="csusoft"; DBOpersdb=newDBOpers(url,user,pwd); db.selectCustomerByCity("Duluth"); }测试结果:写一个在循环中提示用户输入一个顾客ID(cid)和一个商品ID(pid)(各占一行)的PROC程序。该程序应该逐行显示每一个提供pid给cid的代理商的aid和由每个代理商提供的qty总数的列表。如果提供的cid或pid的值在Customers表或Products表中不存在,则程序应该不返回任何行。当用户输入一个空行后,程序终止。Java代码如下: publicvoidselectQTYList()throwsException{ while(true){ System.out.print("请输入客户ID:"); BufferedReaderreader=newBufferedReader(newInputStreamReader( System.in)); Stringcid=reader.readLine(); if(cid==null||"".equals(cid.trim())){ break; } System.out.print("请输入商品ID:"); Stringpid=reader.readLine(); if(pid==null||"".equals(pid.trim())){ break; } Connectionconn=this.getConnection(); Statementstmnt=conn.createStatement(); Stringsql="selecto.aid,sum(o.qty)"+"fromOrderso" +"whereo.cid='"+cid+"'ando.pid='"+pid+"'" +"andexists(select*fromCustomerscwherec.cid='" +cid+"')" +"andexists(select*fromProductspwherep.pid='" +pid+"')"+"groupbyo.aid"; ResultSetset=stmnt.executeQuery(sql); System.out.println("查询结果如下:"); while(set.next()){ Stringaid=set.getString(1); intsum=set.getInt(2); System.out.println("代理商ID:"+aid+"QTY总和:"+sum); } set.close(); stmnt.close(); conn.close(); } }测试代码: publicstaticvoidmain(String[]args)throwsException{ Stringurl="jdbc:oracle:thin:@localhost:1521:ORCL"; Stringuser="jelly"; Stringpwd="csusoft"; DBOpersdb=newDBOpers(url,user,pwd); db.selectQTYList(); }测试结果:(输入的ID为空或空格时推出)在PROC程序中创建一个PL/SQL函数qty_check,以一笔订单的订货数量为参数,判断该订单的订货数量是否超过了被订购商品的库存数量。如果没有超过,返回TRUE,否则返回FALSE。由于在Java中不能创建PL/SQL的函数,所以这个题目直接用Java代码实现,Java代码如下所示: publicbooleanqtyCheck(Stringpid,intqty)throwsException{ booleanflag=false; Connectionconn=this.getConnection(); Statementstmnt=conn.createStatement(); ResultSetset=stmnt .executeQuery("SELECTp.quantityfromPRODUCTSpwherep.pid='" +pid+"'"); if(set.next()){ intstorage=set.getInt(1); if(storage>=qty){ flag=true; } } set.close(); stmnt.close(); conn.close(); returnflag; }测试代码: publicstaticvoidmain(String[]args)throwsException{ Stringurl="jdbc:oracle:thin:@localhost:1521:lee"; Stringuser="system"; Stringpwd="evefish"; DBOpersdb=newDBOpers(url,user,pwd); System.out.println(db.qtyCheck("P07",100501)); System.out.println(db.qtyCheck("P01",1000)); }测试结果:写一个PROC程序接收代理商输入的订单信息,并把它加入到CAP数据库中。要求执行以下步骤:(1)提示并接收用户输入的订单信息,包括顾客的cid、供货的代理商的aid、订购的商品的pid、订购商品的数量qty以及订单的月份month。(2)调用PL/SQL函数qty_check,检查商品订购数量是否小于/等于库存数量。如果函数返回TRUE,则继续执行,否则结束。(3)从表products中该订购商品的库存数量中减去订购数量。(4)在订单表Orders中插入一条记录,其中订单的编号和商品总价由定义在表Orders上的触发器自动填写。将上述步骤定义为一个事务。编写一段程序加以实现。以下是该程序的Java代码: publicvoidmakeOrder()throwsException{ //用户输入: BufferedReaderreader=newBufferedReader(newInputStreamReader( System.in)); System.out.print("请输入客户ID:"); Stringcid=reader.readLine(); System.out.print("请输入代理商ID:"); Stringaid=reader.readLine(); System.out.print("请输入商品ID:"); Stringpid=reader.readLine(); System.out.print("请输入订单数量:"); intqty=Integer.valueOf(reader.readLine()); System.out.print("请输入订单月份:"); Stringmon=reader.readLine(); reader.close(); //判断是否超过库存数量 Connectionconn=this.getConnection(); //开启事务 conn.setAutoCommit(false); if(qtyCheck(pid,qty)){ Statementstmnt=conn.createStatement(); //减去qty stmnt.executeUpdate("updatePRODUCTSpsetp.QUANTITY=p.QUANTITY-" +qty+"wherep.pid='"+pid+"'"); //增加新的订单 stmnt .executeUpdate("INSERTINTOORDERS(MONTH,CID,AID,PID,QTY)VALUES('" +mon +"','" +cid +"','" +aid +"','" +pid +"',"+qty+")"); } mit(); conn.close(); }测试代码: publicstaticvoidmain(String[]args)throwsException{ Stringurl="jdbc:oracle:thin:@localhost:1521:lee"; Stringuser="system"; Stringpwd="evefish"; DBOpersdb=newDBOpers(url,user,pwd); db.makeOrder(); }测试结果:CAP数据库中的表Customers、Products和Agents中都有一个列city。写一段PROC程序,根据用户输入的城市名和表名,查询该表中列city的值等于该指定城市的所有记录。例如,用户输入城市名Duluth和表名Customers,则显示在Duluth的所有顾客的信息。要求采用PROC的动态SQL实现。在Java的JDBC技术中也存在动态SQL,实现如下:publicvoidselectInfoByCity(Stringcity,Stringtable)throwsException{ Connectionconn=this.getConnection(); PreparedStatementps=conn .prepareStatement("select*from?wherecity=?"); ps.setString(1,table); ps.setString(2,city); ResultSetset=ps.executeQuery(); //打印结果 this.printResultSet(set,table); set.close(); ps.close(); conn.close(); }测试代码: publicstaticvoidmain(String[]args)throwsException{ Stringurl="jdbc:oracle:thin:@localhost:1521:lee"; Stringuser="system"; Stringpwd="evefish"; DBOpersdb=newDBOpers(url,user,pwd); db.selectInfoByCity("Duluth","customers"); db.selectInfoByCity("Dallas","products"); db.selectInfoByCity("NewYork","agents"); }测试结果:《大型数据库技术》实验四创建一个PROFILE文件pTester,设置锁定用户的登录失败次数为3次,会话的总计连接时间60分钟,口令可用天数30天。CREATEPROFILEpTesterLIMITFAILED_LOGIN_ATTEMPTS3CONNECT_TIME60PASSWORD_LIFE_TIME30;查询目前所有的环境资源文件及其限制。SELECTPROFILE,RESOURCE_NAME,LIMITFROMDBA_PROFILES

ORDERBYPROFILE;创建一个新用户Tester,密码也为Tester,缺省表空间是CAP_ts。在CAP_ts表空间中可以使用2M空间,指定环境资源文件为pTester。CREATEUSERTester

IDENTIFIEDBYT

温馨提示

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

评论

0/150

提交评论