`

Oracle存储过程的编写以及程序的实现

阅读更多
-- 创建表
CREATE TABLE sys_user(
  ID NUMBER PRIMARY KEY,
  USERNAME VARCHAR2(20) NOT NULL,
  PASSWORD VARCHAR2(20) NOT NULL,
  SEX VARCHAR2(20) NOT NULL,
  STATUS VARCHAR2(20) NOT NULL
);
-- 创建存储过程(新增一条用户信息)
CREATE OR REPLACE PROCEDURE P_USER_ADD(
P_ID IN NUMBER,
P_USERNAME IN VARCHAR2,
P_PASSWORD IN VARCHAR2,
P_SEX IN VARCHAR2,
P_STATUS IN VARCHAR2
) 
BEGIN
INSERT INTO SYS_USER VALUES(P_ID,P_USERNAME,P_PASSWORD,P_SEX,P_STATUS);
END;
-- 创建存储过程(删除一条用户信息)
CREATE OR REPLACE PROCEDURE P_USER_DEL 
(
  P_ID IN NUMBER  
, X_OUT_ID OUT NUMBER  
) AS 
BEGIN
  DELETE SYS_USER WHERE ID=P_ID;
  X_OUT_ID:=0;
  EXCEPTION
  WHEN OTHERS THEN 
  X_OUT_ID:=-1;
END;
-- 创建存储过程(查询全部用户信息)
CREATE OR REPLACE PROCEDURE P_USER_ALL(
X_OUT_RECORD OUT NUMBER,
X_OUT_CURSOR OUT SYS_REFCURSOR
) AS  
BEGIN  
    OPEN x_out_cursor FOR
        SELECT * FROM SYS_USER;   
    x_out_record := 0;   
    EXCEPTION   
    WHEN OTHERS THEN
        x_out_record := -1;   
END; 


package com.ac.procedure.core.dm;
/**
 * 用户实体
 * @author Yan
 * @date 2012-6-13 上午11:26:31
 */
public class SysUsers {
	// 编号
	public int id;
	// 用户名
	public String username;
	// 密码
	public String password;
	// 性别
	public String sex;
	// 状态
	public String struts;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String getStruts() {
		return struts;
	}

	public void setStruts(String struts) {
		this.struts = struts;
	}

}

package com.ac.procedure.core.util;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

/**
 * 连接DB工具类
 * @author Yan
 * @date 2012-6-13 上午11:37:20
 */
public class BaseDao {
	// 连接DB 驱动
	public static String DRIVER="oracle.jdbc.driver.OracleDriver";
	// 连接DB URL
	public static String URL="jdbc:oracle:thin:@localhost:1521:orcl";
	// 用户名
	public static String USERNAME="scott";
	// 密码
	public static String PASSWORD="tiger";
	
	/**
	 * 加载信息,连接DB
	 * @return Connection
	 */
	public Connection getConnection() {
		Connection conn=null;
		try {
			Class.forName(DRIVER);
			conn=DriverManager.getConnection(URL, USERNAME, PASSWORD);
		} catch (Exception e) {			
			e.printStackTrace();
		}
		return conn;
	}
	
	/**
	 * 关闭DB连接
	 * @param conn DB连接对象
	 * @param call 调用储存过程对象 
	 * @param rs 结果集对象
	 */
	public void closeAll(Connection conn,CallableStatement call,ResultSet rs){
		try {
			if (rs != null) {   
	            rs.close();   
	        }   
	        if (call != null) {   
	        	call.close();   
	        }   
	        if (conn != null) {   
	        	conn.close();   
	        }   
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

package com.ac.procedure.core.dao;

import java.util.List;

import com.ac.procedure.core.dm.SysUsers;
/**
 * 用户接口
 * @author Yan
 * @date 2012-6-13 上午11:29:24
 */
public interface SysUsersDao {
	/**
	 * 新增一条用户信息
	 * @param users 用户对象
	 * @return success or failure
	 */
	public String saveUsers(SysUsers users);
	/**
	 * 删除一条用户信息
	 * @param id 编号
	 * @return success or failure
	 */
	public String deleteUsers(int id);
	/**
	 * 查询全部用户信息
	 * @return List
	 */
	public List<SysUsers> getUserAll();
}

package com.ac.procedure.core.dao.impl;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;

import oracle.jdbc.driver.OracleTypes;

import com.ac.procedure.core.dao.SysUsersDao;
import com.ac.procedure.core.dm.SysUsers;
import com.ac.procedure.core.util.BaseDao;
/**
 * 用户接口实现(调用存储过程)
 * @author Yan
 * @date 2012-6-13 上午11:52:58
 */
public class SysUsersDaoImpl extends BaseDao implements SysUsersDao {

	// 连接DB 对象
	private Connection conn;
	// 存储过程 对象
	private CallableStatement call;
	// 结果集 对象
	private ResultSet rs;
	
	/*
	 * 新增一条用户信息(non-Javadoc)
	 * @see com.ac.procedure.core.dao.SysUsersDao#saveUsers(com.ac.procedure.core.dm.SysUsers)
	 */
	@Override
	public String saveUsers(SysUsers users) {
		String flag="success";
		try {
			String sql="{CALL P_USER_ADD(?,?,?,?,?)}";		
			conn=this.getConnection();
			call=conn.prepareCall(sql);
			call.setInt(1, users.getId());
			call.setString(2, users.getUsername());
			call.setString(3, users.getPassword());
			call.setString(4, users.getSex());
			call.setString(5,users.getStruts());
			call.execute(); 
		} catch (SQLException e) {			
			e.printStackTrace();
			flag="failure";
		} finally{
			this.closeAll(conn, call, null);
		}
		return flag;
	}
	
	/*
	 * 删除一条用户信息(non-Javadoc)
	 * @see com.ac.procedure.core.dao.SysUsersDao#deleteUsers(int)
	 */
	@Override
	public String deleteUsers(int id) {
		String flag="success";
		try {
			String sql="{CALL P_USER_DEL(?,?)}";		
			conn=this.getConnection();
			call=conn.prepareCall(sql);
			call.setInt(1, id);
			call.registerOutParameter(2, Types.INTEGER);
			call.execute();
		} catch (Exception e) {
			e.printStackTrace();
			flag="failure";
		} finally{
			this.closeAll(conn, call, null);
		}
		return flag;
	}

	@Override
	public List<SysUsers> getUserAll() {
		List<SysUsers> list=new ArrayList<SysUsers>();
		SysUsers users=null;
		try {
			String sql="{CALL P_USER_ALL(?,?)}";		
			conn=this.getConnection();
			call=conn.prepareCall(sql);
			call.registerOutParameter(1, Types.INTEGER);   
		      call.registerOutParameter(2, OracleTypes.CURSOR);   
		      call.execute();		         
		      rs=(ResultSet) call.getObject(2);   
		      while(rs.next()){   
		    	  users=new SysUsers();
		    	  users.setId(rs.getInt(1));
		    	  users.setUsername(rs.getString(2));
		    	  users.setPassword(rs.getString(3));
		    	  users.setSex(rs.getString(4));
		    	  users.setStruts(rs.getString(5));
		    	  list.add(users);
		      }
		} catch (Exception e) {
			e.printStackTrace();
			list=null;
		} finally{
			this.closeAll(conn, call, rs);
		}
		return list;
	}

}

package com.ac.procedure.core.dao.impl;

import java.util.List;

import org.junit.Test;

import com.ac.procedure.core.dm.SysUsers;

public class SysUsersDaoImplTest {
    
	SysUsersDaoImpl sysusers=new SysUsersDaoImpl();
	
	@Test
	public void testSaveUsers() {
		SysUsers users=new SysUsers();
		users.setId(1000000000);
		users.setUsername("闫小甲");
		users.setPassword("123456");
		users.setSex("男");
		users.setStruts("启用");
		String result = sysusers.saveUsers(users);
		System.out.println("保存用户:"+result);
	}

	@Test
	public void testDeleteUsers() {
		String result= sysusers.deleteUsers(1000000000);
		System.out.println("删除用户:"+result);
	}

	@Test
	public void testGetUserAll() {
		List<SysUsers> list=sysusers.getUserAll();
		for (SysUsers sysUsers : list) {
			System.out.println("编号:"+sysUsers.getId()
					+"\t用户名:"+sysUsers.getUsername());
		}
	}

}
  • 大小: 16.5 KB
0
0
分享到:
评论

相关推荐

    用java调用oracle存储过程

    通过实例详细介绍了用java调用oracle存储过程的方法和步骤,包括无返回值的存储过程、有返回值的存储过程(非列表)和返回列表的存储过程的编写、JAVA调用,是一个对存储过程调用的一个全面总结,对程序开发具体实际...

    pb源码编写执行oracle存储过程的程序

    pb编写的oracle数据库中执行存储过程脚本的程序;

    存储过程编写经验和优化措施

    存储过程编写经验和优化措施 存储过程编写经验和优化措施

    oracle 存储过程编写

    教人使用包,程序,类,游标 教人使用包,程序,类,游标 教人使用包,程序,类,游标

    如何开发ORACLE存储过程

    在我的上一个银行项目中,我接到编写ORACLE存储过程的任务,我是程序员,脑袋里只有一些如何使用CALLABLE接口调用存储过程的经验,一时不知如何下手,我查阅了一些资料,通过实践发现编写ORACLE存储过程是非常不容易...

    直接用oracle存储过程完成基于socket的通讯

    直接使用oracle 提供的库函数实现基于sokcet的短连接客户端通讯,无需再编写客户端程序进行通讯再调用存储过程。比较奇怪的应用,只因为系统改造中,原系统采用存储过程接口,而新系统客户端不改造,只改造服务段为 ...

    入门存储过程

    存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的 运算。 * 可保证数据的安全性和完整性。 # 通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全...

    存储过程语法大全

    存储过程和函数 ORACLE编写的程序一般分为两类,一种是可以完成一定功能的程序叫存储过程;另一种就是在使用时给出一个或多个值,处理完后返回一个或多个结果的程序叫函数。这两种程序都存放在Oracle数据库字典中...

    Oracle專家高級編程_PART2

    本书是一本关于使用Oracle成功开发应用程序的工具手册,由Oracle公司的资深开发人员...用interMedia、基于C的外部过程、Java存储过程和对象关系特性实现Oracle数据库功能的扩展;Oracle数据库安全管理的实现方式等。

    Oracle專家高級編程_PART1

    本书是一本关于使用Oracle成功开发应用程序的工具手册,由Oracle公司的资深开发人员...用interMedia、基于C的外部过程、Java存储过程和对象关系特性实现Oracle数据库功能的扩展;Oracle数据库安全管理的实现方式等。

    Oracle 从入门到精通视频教程(11G版本)(ppt)

    第10章-存储过程,提高程序执行的效率 什么是存储过程 在SQL*Plus中创建存储过程 使用PL/SQL工具创建存储过程 修改删除存储过程 第11章-触发器,保证数据的正确性 什么是触发器 SQL*PLUS操作触发器 使用PL/SQL...

    用java编程将txt文件数据导入oracle

    工作中有很多数据以txt方式存储,需要导入oracle数据库处理(方便进行计算、统计),因文件较多,不便于手工处理,所以编写此程序以便进行数据导入。已经测试过,可以将数据导入oracle。

    利用loadrunner测试ORACLE存储过程的性能

    装好以后,打开程序,应该看到菜单栏里多了一个:  首先需要安装LR的.NETADD-IN,在开发环境编写代码,做数据库连接,然后调用执行存储过程。  装好以后,打开程序,应该看到菜单栏里多了一个:  然后添加一个LR...

    Oracle11g从入门到精通2

    《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的数据库管理(如安装与启动,用户权限、备份与...,以及Oracle的应用开发基础...

    Oracle_PLSQL语言基础

    ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL/SQL程序。  PL/SQL的优点  从版本6...

    ORACLE PL/SQL 基础教程及参考

    它们可以存储在数据库中成为存储过程和存储函数,并可以由程序来调用,它们在结构上同程序模块类似。 PL/SQL过程化结构的特点是: 可将逻辑上相关的语句组织在一个程序块内; 通过嵌入或调用子块,构造功能强大的...

    基于Oracle Spatial的配电网GIS数据存储方法

    针对配电网地理信息系统(GIS)数据存储技术方面目前存在的数据不一致、存取速度慢等问题,提出了一种基于Oracle...程序的运行结果表明实例所采用的数据存储方法能够在配电网GIS中实现空间数据和属性数据的一体化存储。

Global site tag (gtag.js) - Google Analytics