使用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();
}
}
}