Oracle_day3 java 调用 oracle 中的存储过程

标签: oracle 数据库 javaee web 企业级开发
10人阅读 评论(1) 收藏 举报
分类:

导包从 oracle db 目录中找ojdbc14.jar

书写utils.java 类

package Utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbsUtils {

	private static String driver ="oracle.jdbc.OracleDriver";
	private static String url ="jdbc:oracle:then:@20.20.20.152:1521/orcl";
	private static String user = "scott" ; 
	private static String password = "tiger" ; 
	
	// 静态代码块注册驱动
	static{
		
		try {
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			throw new RuntimeException(e) ; 
		} 
		
	}
	
	public static Connection  getConnection (){
		try {
			return DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			throw new RuntimeException(e) ; 
			}
	} 
	
	
	
	public static void close (Connection connection,Statement statement ,ResultSet re){
		if(re!= null){
			try {
				re.close();
			} catch (SQLException e) {
				throw new RuntimeException(e); 
			}  finally {
				re=null; 
			}
		}
		if(statement!= null){
			try {
				statement.close();
			} catch (SQLException e) {
				throw new RuntimeException(e); 
			}  finally {
				statement=null; 
			}
		}
		if(connection!= null){
			try {
				connection.close();
			} catch (SQLException e) {
				throw new RuntimeException(e); 
			} finally {
				connection=null; 
			}
		}
		
   // 我们把对象的引用指向空值 ,意味着,这个对象会被java垃圾回收的对象, 可以把 他占用的资源释放掉   -- GC
		// 我们能不能通过java代码干预java的垃圾回收 ? 
		// 我们学过java的一个api system  对象的 gc()方法, 请求运行垃圾回收 , 
		// java的GC不受 代码的空值, 我们不能用java控制gc  
		// 安卓手机的回收垃圾是假的  
		//运行一个java程序   javahelloworld   
		// 印象java垃圾回收的 两个参数, -Xms100M   -Xmx200M   运行java的堆内存最小是100M 最打是 200 M
		// 垃圾回收在什么情况有意义, 频繁的垃圾回收会降低性能, 
		// 在内存不够的时候进行垃圾回收 才有意义,
		//技术领域
		//1. 性能优化
		//2. 故障诊断 : 死锁 (JDK:ThreadDump) 通过分析他就能 找到死锁 的位置
		//   oracle 自动处理,他会自动回滚死锁的位置
	}
	
	
	
}
	
	

如果在公司中发展 7 8 年我们如果走技术路线推荐走

1. 性能优化

2.故障诊断

             死锁 (JDK:ThreadDump) 通过分析他就能 找到死锁 的位置

             oracle 自动处理,他会自动回滚死锁的位置

课外

 // 我们把对象的引用指向空值 ,意味着,这个对象会被java垃圾回收的对象, 可以把 他占用的资源释放掉   -- GC
        // 我们能不能通过java代码干预java的垃圾回收 ?
        // 我们学过java的一个api system  对象的 gc()方法, 请求运行垃圾回收 ,
        // java的GC不受 代码的空值, 我们不能用java控制gc  
        // 安卓手机的回收垃圾是假的  
        //运行一个java程序   javahelloworld   
        // 印象java垃圾回收的 两个参数, -Xms100M   -Xmx200M   运行java的堆内存最小是100M 最打是 200 M
        // 垃圾回收在什么情况有意义, 频繁的垃圾回收会降低性能,
        // 在内存不够的时候进行垃圾回收 才有意义,
        //技术领域
        //1. 性能优化
        //2. 故障诊断 : 死锁 (JDK:ThreadDump) 通过分析他就能 找到死锁 的位置
        //   oracle 自动处理,他会自动回滚死锁的位置

oracle 中的死锁演示

一个sql 语句执行中拿着一把锁这个语句不执行玩, 就不能 再执行别的sql 语句, 不提交事物, 先进的sql 语句不会执行, 第二条就不能更新



java 调用存储过程 和 java 发送原生sql 语句操作数据库 哪个块? 

java 调用存储过程 比较块 开发中直接使用springmvc 调用存储过程, 开发效率很高


在存储过程中,如果返回数据过多, 我们怎么进行 返回? 

 我们采用集合 什么可以返回集合?

光标 我们使用光标就可以返回集合再out参数中使用光标

声明一个包结构,包分为包头和包体

包的包头只负责声明不负责实现, plsql程序写在下面的包体中 再包中要自定义类型, 使用关键字 type   ref 引用光标, 就把光标进行返回 , 包体要实现包头中的所有存储函数和存储过程 ,

我们创建包,

包头

create or replace package mypackage is

       type empcursor is ref cursor;
       procedure queryEmpList(dno in number,empList out empcursor);

end mypackage;

包体

create or replace package mypackage is

       type empcursor is ref cursor;
       procedure queryEmpList(dno in number,empList out empcursor);

end mypackage;

java程序调用   (接口的转换(java 中的statement 中是没有指针 这个类型的但是oracle 驱动包中提供了这个个子接口, 我们向下转型 即可))

@Test
	public void testpackage(){
		String sql = "{call mypackage.QUERYEMPLIST(?,?)}";
		Connection con = null ;
		CallableStatement call = null ; 
		ResultSet re = null ; 
		
		try{
			con =JdbsUtils.getConnection() ; 
			call = con.prepareCall(sql); 
			// 对in 参数进行赋值
			call.setInt(1, 10);
			// out 进行取值
			call.registerOutParameter(2,OracleTypes.CURSOR);
			
			// 执行
			call.execute(); 
			
			// 取出结果
			 re = ((OracleCallableStatement)call).getCursor(2); 
			
			// 取出结果
			 while (re.next()) {
				String name = re.getString("ename"); 
				double sal = re.getDouble("sal"); 
				System.out.println(name+"\t"+sal);
				
				
			}
			
		}catch (Exception e) {
			throw new RuntimeException(e) ; 
			// TODO: handle exception
		}finally{
			
		}
		
	}
	

oracle 中的plsql  存储过程 很重要, 因为他们的效率搞, 用于springmvc 开发, 后面的ssm 用到



















查看评论

JAVA调用oracle三种存储过程实例

JAVA调用存储过程:几经挫折,但总算搞通了,为了避免后来者少走弯路,特记述与此,同时亦对自己进行鼓励。创建测试用表: CREATE TABLE T_TEST(I_ID NVARCHAR(20),I_...
  • ice_spar
  • ice_spar
  • 2007-10-20 21:14:00
  • 4440

oracle 存储过程调用java一

一、如何创建java存储过程?通常有三种方法来创建java存储过程。1. 使用oracle的sql语句来创建:e.g. 使用create or replace and compile java sou...
  • thinker28754
  • thinker28754
  • 2009-03-06 13:49:00
  • 8074

Oracle数据库中调用Java类开发存储过程、函数的方法

oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL,除此之外,还可以用时下最流行的编程语言Java来做开发。随着对oracle的了解越来越多,越来越禁不住orac...
  • dantegarden
  • dantegarden
  • 2016-07-13 11:59:53
  • 755

让你 Oracle 的存储过程与Java代码开始进行交互

Oracle 存储过程定义格式如下: sql 代码 CREATE OR REPLACE PROCEDURE PRO_YOUR_PROCEDURE (        ELEMEN...
  • qq_30114557
  • qq_30114557
  • 2017-04-06 15:53:49
  • 362

java调用oracle带有返回值的存储过程

java调用oracle带有返回值的存储过程 1.首先在数据库中必须要有存储过程,那么创建存储过程: 【案例】编写一个存储过程,输入雇员的编号,返回该雇员的姓名 create or replac...
  • zhengqiqiqinqin
  • zhengqiqiqinqin
  • 2013-06-14 22:37:39
  • 7957

如何在Oracle中使用Java存储过程(详解)

其实,这篇短文,我早就应该写了。因为,Java存储过程今后在各大数据库厂商中越来越流行,功能也越来越强大。这里以Oracle为例,介绍一下java存储过程的具体用法。一、如何创建java存储过程?通常...
  • xiaodoudou123456
  • xiaodoudou123456
  • 2016-06-16 22:13:57
  • 408

oracle存储过程及Java调用

一个oracle存储过程对象数组参数的例子,Java调用测试通过
  • u013863751
  • u013863751
  • 2015-05-28 01:14:36
  • 1919

java 调用oracle中存储过程与调用function函数两例

在java中调用存储过程与调用function函数类似但不相同 1.调存储过程 有几个参数,用几个占位符在存储过程的()中  public static ArrayList ...
  • LegendaryHe
  • LegendaryHe
  • 2017-03-16 16:52:55
  • 1070

java调用oracle存储过程例子

1,导jar包---ojdbc6.jar 2,建立一个分页存储过程 create or replace procedure my_page(v_in_tableName in varchar2, ...
  • u013614451
  • u013614451
  • 2015-05-28 23:42:51
  • 716

JAVA中调用Oracle存储过程插入数据

其实直接使用JAVA中的PreparedStatement就可以实现Oracle
  • ll328062201
  • ll328062201
  • 2014-10-10 16:48:43
  • 389
    个人资料
    持之以恒
    等级:
    访问量: 269
    积分: 302
    排名: 27万+
    博客专栏
    java

    文章:0篇

    阅读:0
    文章分类
    文章存档
    最新评论