Oracle_day3 java 调用 oracle 中的存储过程

版权声明:版权为ZZQ所有 https://blog.csdn.net/qq_39148187/article/details/79948597

导包从 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 用到



















阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页