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