您的位置:首页 > 数据库 > Oracle

Java调用Oracle存储过程

2016-01-06 22:47 525 查看
1.查询当前用户所创建的存储过程

select object_name from user_procedures;


2.存储过程的参数类型不能是number(10),而是number
create or replace procedure pro_insertemp(p1 in number,p2 in varchar2,
 p3 in char,
 p4 in number,
 p5 in varchar2
 ) is
 begin
 insert into emp values(p1,p2,p3,p4,p5);
 commit;
 end pro_insertemp;


3.代码:

ctrl+shift+f是自动对齐

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

public class ConnectOracle {
	public static void main(String args[]) {
		Connection con = null;// 创建一个数据库连接
		PreparedStatement pre = null;// 创建预编译语句对象,一般都是用这个而不用Statement
		ResultSet result = null;// 创建一个结果集对象
		CallableStatement csmt = null;
		CallableStatement proc = null; // 创建执行存储过程的对象
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");// 加载Oracle驱动程序
			System.out.println("开始尝试连接数据库!");
			String url = "jdbc:oracle:" + "thin:@127.0.0.1:1521:ORCL";// 127.0.0.1是本机地址,ORCL是Oracle的默认数据库名
			String user = "test";// 用户名
			String password = "1234";// 你安装时选设置的密码
			con = DriverManager.getConnection(url, user, password);// 获取连接
			System.out.println("连接成功!");

			proc = con.prepareCall("{ call pro_insertemp(?,?,?,?,?) }"); // 设置存储过程
																			// call为关键字.

			proc.setLong(1, 4);
			proc.setString(2, "david");
			proc.setString(3, "m");
			proc.setLong(4, 20);
			proc.setString(5, "ceo");

			proc.execute();// 执行
			// csmt.close();
			proc.close();

			String sql = "select * from emp";// 预编译语句,“?”代表参数
			pre = con.prepareStatement(sql);// 实例化预编译语句
			result = pre.executeQuery(sql);
			while (result.next())
				// 当结果集不为空时
				System.out.println("员工号:" + result.getInt("empno") + "职位:" + result.getString("job"));
			// sql="execute pro_insertemp";
			// pre=con.prepareStatement(sql);
			// result=pre.executeQuery(sql)
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				// 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源
				// 注意关闭的顺序,最后使用的最先关闭
				if (result != null)
					result.close();
				if (pre != null)
					pre.close();
				if (con != null)
					con.close();
				System.out.println("数据库连接已关闭!");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: