信息采集系统
模块功能:
1.录入员工信息,并写入到数据库 注意事项:
A.使用存储过程实现
B.录入数据项为员工姓名,员工岗位,上级领导,雇佣日期,工资,奖金 C.上级领导页面选择为领导人员姓名,保存值应为编号 D.员工编号采用自动生成的sequence E.将数据写入到Scott用户下的EMP表中
F:动态SQL语句采用”Execute IMMEDIATE”执行
自动备份系统
模块功能
1.使用线程在每日指定时间导出EMP表中的数据,并写入到新的表中,新表的命名方式采用:EMP+日期+时间,如MP2006083002022; 2.将导入的数据记录数写入到日志文件中
3.每个月最后一天,自动删除前一个月备份的所有的表(从USER_TABLES中可以得到当前用户拥有的表). 注意事项:
A:使用线程时要注意,在线程被启动后要执行Thread.sleep()方法,保证该操作不会被执行多次.
附:存储过程调用方式:
package org.neworiental.dao;
import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import oracle.jdbc.OracleTypes; /**
* 本类为存储过程的调用类
* 提供了调用存储过程的接口方法:
* 1.Object[] process(String procedureName,int outlen) * 2.Object[] process(String procedureName,Object[] in)
* 3.Object[] process(String procedureName,Object[] in,int outlen) * 说明:1.无输入值 2.无输出 3.输入输出均有 * 并演示了存储过程方法的调用方式
* 在本类中,process()方法为外部接口方法 * 客户端在调用时需要选择三个参数: * 1.procedureName:存储过程名字 * 2.in:输入参数数组 * 3.out:输出参数个数
* 该方法返回输出内容,客户端可以提取给Object[]数组中的值 * 其他方法为辅助方法,不对客户端公布. * 调用方式:
Object[] obj = new Object[1]; //输入参数数组定义 obj[0] = new Integer(7499); //输入参数值
int out = 1; //输出参数参数,注意输出参数均为varchar2类型 Object[] o = ProcedureMgr.process(\"GETINFO\调用GETINFO,GETINFO定义见类注释
System.out.println(o[0]); //打印out出的值,这里取第一个
* 附:示例中用到的存储过程GETINFO:
CREATE OR REPLACE PROCEDURE GETINFO( NUM NUMBER,UNAME OUT VARCHAR2 ) AS BEGIN
SELECT ENAME INTO UNAME FROM EMP WHERE EMPNO=NUM; END; *
* @author xdf michael * 2006.8.30 */
public class ProcedureMgr { //常量定义
private static final String URL=\"jdbc:oracle:thin:@127.0.0.1:1521:XDF\";//URL连接串
private static final String USERNAME=\"scott\";//用户名 private static final String PASSWORD=\"tiger\";//密码 /**
* 获取数据库连接 * @return connection */
private Connection getConnection() throws Exception{
Class.forName(\"oracle.jdbc.driver.OracleDriver\");//1.声明驱动 Connection conn = DriverManager.getConnection(URL, USERNAME,PASSWORD); //2.获取连接 return conn; } /**
* 重载process方法
* 本方法负责处理无输入参数的存储过程调用 * 如果无输入参数,可以直接调用本函数 * @param procedureName:存储过程名称 * @param outlen:输出参数长度
* @return:返回process(procedureName,in,outlen)调用结果 */
public static Object[] process(String procedureName,int outlen){ Object[] in = null; if(in==null){
in = new Object[0]; }
return process(procedureName,in,outlen); }
/**
* 重载process方法
* 本方法负责处理无输入参数的存储过程调用 * 如果无输出参数,可以直接调用本函数 * @param procedureName:存储过程名称 * @param in:输入参数数组
* @return:返回process(procedureName,in,outlen)调用结果
*/
public static Object[] process(String procedureName,Object[] in){ int outlen = 0;
return process(procedureName,in,outlen); } /**
* 类方法,直接通过类名调用
* 要求存储过程的输入参数在前,输出参数在后 * 参数的输出类型均为字符串
* @param procedureName:存储过程名字 * @param in:输入参数数组 * @param out:输出参数个数 * @throws Exception */
public static Object[] process(String procedureName,Object[] in,int outlen){ try{
ProcedureMgr pm = new ProcedureMgr();
Connection con = pm.getConnection(); //获取数据库连接
int len = in.length; String strProcedure =pm.getProcedureStr(procedureName,len,outlen);//获取存储过程调用串
CallableStatement cst = con.prepareCall(strProcedure);//加载存储过程
pm.setParameter(cst,in,outlen); //设置参数 cst.executeQuery(); //执行存储过程调用
return pm.getObjects(cst,len,outlen); }catch(Exception e){ e.printStackTrace(); return null; } } /**
* 从CallableStatement获取所有执行结果 * 封装到Object数组中并返回
* 客户端只需要根据下标从该数组中直接提取即可,元素下标从0开始 * @param cst:CallableStatement * @param inlen:输入参数长度 * @param outlen:输出参数长度
* @return :返回包含了存储过程out值的Object数组 * @throws Exception:异常交给调用者处理 */
public Object[] getObjects(CallableStatement cst,int inlen, int outlen) throws Exception{ //获取执行后的输出结果
Object[] obj = new Object[outlen]; for(int k=0;kobj[k] = cst.getObject(inlen+1+k); //inlen+1表示out参数设置位置 }return obj; } /**
* 获取连接字符串
* @param procedureName:存储过程名称 * @param in:输入参数长度
* @param outlen:输出参数的长度 * @return:存储过程调用串 */
private String getProcedureStr(String procedureName,int inlen,int outlen){ StringBuffer s = new StringBuffer(\"{call \"+procedureName+\"(\"); for(int i=0;ifor(int j=0;jString str = s.substring(0,s.length()-1); //截取掉最后一个,符号 str = str +\")}\";System.out.println(str); return str; } /**
* 设置输入参数,下标从1开始 */
private void setParameter(CallableStatement cst,Object[] in,int outlen) throws Exception{
int index =1;
for(int i=0;ifor(int j=0;j//输出类型,如果out的参数类型为NUMBER或其他类型,需要使用转换函数 cst.registerOutParameter(index,OracleTypes.VARCHAR); index++; } } /*** 测试方法 * @param args */
public static void main(String[] args) { try{
Object[] obj = new Object[2]; //输入参数数组定义 obj[0] = new Integer(7499); //输入参数值
int out = 1; //输出参数参数,注意输出参数均为varchar2类型 Object[] o = ProcedureMgr.process(\"GETINFO\ //调用GETINFO,GETINFO定义见类注释
//System.out.println(o[0]); //打印out出的值,这里取第一个 }catch(Exception e){ e.printStackTrace(); } } }
本文档结束!