PL/SQL编程—Java中使用JDBC调用过程实现对数据库表的增删改查

使用JDBC调用过程实现对数据库表的增删改查大致可分为如下几个步骤:

1.获得连接子对象

创建连接字对象如下:

// 第一步:从oracle.jdbc.driver中装载驱动OracleDriver
Class.forName("oracle.jdbc.driver.OracleDriver");

 

// 第二步:定义连接字符串jdbc:oracle:thin:@***.***.***.***:数据库实例端口:数据库实例名
String url_Str = "jdbc:oracle:thin:@172.19.214.123:1521:ORCL";

 

// 第三步:DriverManager.getConnention()获得数据库Connection连接对象
Connection conn = DriverManager.getConnection(url_Str, "scott","scott");

 

 创建连接字对象的类:

package sj.JDBC_v02;

import java.sql.Connection;
import java.sql.DriverManager;

/**
 * 创建连接字对象
 * @author Songjie_xuan
 *
 */
public class Connection_JDBC {

	public static Connection get_Connection() {
		
		try {

			// 第一步:装载驱动
			Class.forName("oracle.jdbc.driver.OracleDriver");

			// 第二步:定义连接字符串
			String url_Str = "jdbc:oracle:thin:@172.19.214.123:1521:ORCL";

			// 第三步:DriverManager.getConnention()获得数据库Connection连接对象
			Connection conn = DriverManager.getConnection(url_Str, "scott",
					"scott");
			
			return conn;
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return null;
	}
}

 类调用静态方法获得Connention连接字对象: Connection_JDBC.get_Connection();

2.定义调用SQL语句的字符串:{call pro_addData(?,?,?)}

首先,在PL/SQL中定义过程,语法如下:

 create or replace procedure Procedure_NAME() is
begin
  功能语句

end;

示例如下:

create or replace procedure pro_addData(v_userid varchar2, v_username varchar2,v_usersex varchar2) is
begin
  insert into new_tab values(v_userid,v_username,v_usersex);
end;

 将此过程创建:



语法是:

{过程执行语句}

过程执行语句中,过程往往有参数,在Java中使用?代替,有几个参数就用几个?

 

3.然后调用prepareCall()方法获得PL/SQL执行语句的编译对象:

conn.prepareCall("{call pro_addData(?,?,?)}");

// 3.获得编译对象
			CallableStatement c_sta = conn.prepareCall(sql_ExeSta);

 

4.通过编译对象给过程执行语句中的?赋值:

// 4.给?号赋值
c_sta.setString(1, num);
c_sta.setString(2, name);
c_sta.setString(3, sex);

5.最后是调用execute()方法执行,执行完成要调用close()方法关闭

 

 

完整实例如下:

package sj.JDBC_v02;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.util.Date;
import java.util.Scanner;

/**
 * Java中使用JDBC调用过程实现对标的增删改查实例
 * 
 * @author Songjie_xuan
 * 
 */
public class Calling_Process {

	public static void main(String[] args) {

		@SuppressWarnings("resource")
		Scanner scan = new Scanner(System.in);
		String str = scan.next();
		if (str.equals("add"))
			add_Data("20120000", "杨亦风", "男");
		else if (str.equals("select"))
			sel_Data(7788);
	}

	/**
	 * 添加数据到new_tab表
	 * 
	 * @param num
	 *            =>
	 * @param name
	 *            =>
	 * @param sex
	 *            =>
	 */
	public static void add_Data(String num, String name, String sex) {

		try {
			// 1.获得连接对象
			Connection conn = Connection_JDBC.get_Connection();

			// 2.定义调用过程的sql执行语句
			String sql_ExeSta = "{call pro_addData(?,?,?)}";

			// 3.获得编译对象
			CallableStatement c_sta = conn.prepareCall(sql_ExeSta);

			// 4.给?号赋值
			c_sta.setString(1, num);
			c_sta.setString(2, name);
			c_sta.setString(3, sex);

			// 执行
			c_sta.execute();
			c_sta.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 查询emp表中指定编号的员工姓名和工资
	 * 
	 * @param num
	 *            =>指定的编号
	 */
	public static void sel_Data(int num) {

		try {

			Connection conn = Connection_JDBC.get_Connection();

			String sql_ExeSta = "{call pro_Select(?,?,?,?)}";

			CallableStatement c_sta = conn.prepareCall(sql_ExeSta);

			c_sta.setInt(1, num);
			
			c_sta.registerOutParameter(2, java.sql.Types.VARCHAR);
			c_sta.registerOutParameter(3, java.sql.Types.DOUBLE);
			c_sta.registerOutParameter(4, java.sql.Types.DATE);

			// 执行
			c_sta.execute();
			
			// 取值
			String ename = (String)c_sta.getObject(2);
			double sal = (double)c_sta.getObject(3);
			Date date = (Date)c_sta.getObject(4);
			
			System.out.println("姓名:" +ename+"/n"+"工资:"+sal+"入职时间:"+date);

			c_sta.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

猜你喜欢

转载自songjie-xuan.iteye.com/blog/2145352