`

oracle与jdbc的结合

阅读更多


import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBC_Batch_Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// JDBC批处理 执行批量语句
		// 插入emp dept
		Connection connection = OracleConnection.getConnection();
		Statement statement = null;

		String sqlDept = "insert into dept values(55,'批处理部门','福建')";
		String sqlEMP = "insert into emp(empno,ename,sal,deptno) values(8001,'JDBC',5000,55)";
		try {
			// /设置自动提交为false
			connection.setAutoCommit(false);
			statement = connection.createStatement();
			statement.addBatch(sqlDept);
			statement.addBatch(sqlEMP);

			statement.executeBatch();
			connection.commit();

			connection.setAutoCommit(true);

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			// 出现异常需要回滚数据
			try {
				connection.rollback();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		} finally {

			try {
				statement.close();
				connection.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
		
		System.out.println("OK");

	}

}



callableStatement.setint(1,值)//参数位置
callableStatement.setint("参数名",值);//参数名为定义的形参名字


注意过程调用中的参数命名表示法
位置、名称、混合(当出现名称时后面剩下的只能是名称表示)
但是JDBC中只能是位置或者名称

通过参数名称设置值,只能通过参数名称获得值

callableStatement.setInt("empno_p", 8888);
// out类型的参数
callableStatement.registerOutParameter("ename_p", Types.VARCHAR);
callableStatement.registerOutParameter("sal_p", Types.INTEGER);
boolean ex = callableStatement.execute();
System.out.println("ex=" + ex);
// if(callableStatement.execute()){
String ename = callableStatement.getString("ename_p");
int sal = callableStatement.getInt("sal_p");

同理:通过位置设置参数,只能通过位置获得对应out参数的值


import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;

import oracle.jdbc.OracleTypes;

public class TestCallStatement {
	static void noReturnValue() {
		// create or replace procedure add_dept(id_p number, dname_p
		// varchar2,loc_p varchar2) is
		// begin
		// --不会受父事务的影响
		// insert into dept values(id_p,dname_p,loc_p);
		// commit;--进行自主提交业务
		// dbms_output.put_line('过程提交完成...');
		// end add_dept;
		Connection connection = OracleConnection.getConnection();
		CallableStatement callableStatement = null;
		try {
			callableStatement = connection
					.prepareCall("{call add_dept(?,?,?)}");
			// 位置
			// callableStatement.setInt(1, 56);
			// callableStatement.setString(2, "JDBC过程插入");
			// callableStatement.setString(3, "福州");
			// 名称
			callableStatement.setInt("id_p", 57);
			callableStatement.setString("dname_p", "JDBC过程插入57");
			callableStatement.setString("loc_p", "福州57");
			callableStatement.executeUpdate();

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				callableStatement.close();
				connection.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
		System.out.println("OK");

	}

	static void haveReturnValue_notList() {
		// create or replace procedure out_pro(empno_p in number,
		// ename_p out varchar2,
		// sal_p out number) is
		// begin
		// select ename, sal into ename_p, sal_p from emp where empno = empno_p;
		// exception
		// when NO_DATA_FOUND then
		// ename_p := 'NULL';
		// sal_p := -1;
		// end out_pro;
		Connection connection = OracleConnection.getConnection();
		CallableStatement callableStatement = null;
		try {
			callableStatement = connection.prepareCall("{call out_pro(?,?,?)}");
			callableStatement.setInt(1, 8888);
			callableStatement.registerOutParameter(2, Types.VARCHAR);
			callableStatement.registerOutParameter(3, Types.INTEGER);
			callableStatement.execute();
			String ename = callableStatement.getString(2);
			int sal = callableStatement.getInt(3);
			System.out.println("ename=" + ename);
			System.out.println("sal=" + sal);

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				callableStatement.close();
				connection.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
		System.out.println("OK");

	}

	static void haveReturnValue_isList() {
		// 包头
		// create or replace package test_pack is
		// --定义公共变量
		// type dept_cursor is REF CURSOR ;
		// procedure dept_proc(p_dept_cursor out dept_cursor);
		// function emp_function return varchar2;
		// function order_fun return varchar2;
		// end test_pack;
		// 包体
		// create or replace package body test_pack is
		// --不需要重复定义游标
		// --注意过程out类型的游标参数
		// procedure dept_proc(p_dept_cursor out dept_cursor) is
		// begin
		// open p_dept_cursor for
		// select * from dept;
		// end dept_proc;
		// end test_pack;
		Connection connection = OracleConnection.getConnection();
		CallableStatement callableStatement = null;
		ResultSet resultSet = null;
		try {
			callableStatement = connection
					.prepareCall("{call test_pack.dept_proc(?)}");
			// oracle.jdbc.OracleTypes.CURSOR
			callableStatement.registerOutParameter(1, OracleTypes.CURSOR);
			callableStatement.execute();
			resultSet = (ResultSet) callableStatement.getObject(1);
			while (resultSet.next()) {
				System.out.println(resultSet.getInt(1) + "-"
						+ resultSet.getString(2) + "-"
						+ resultSet.getString("loc"));

			}

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				callableStatement.close();
				connection.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
		System.out.println("OK");

	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// noReturnValue();
//		haveReturnValue_notList();
		haveReturnValue_isList();

	}

}

分享到:
评论

相关推荐

    Java使用Jdbc连接Oracle执行简单查询操作示例

    主要介绍了Java使用Jdbc连接Oracle执行简单查询操作,结合实例形式详细分析了java基于jdbc实现Oracle数据库的连接与查询相关操作技巧,需要的朋友可以参考下

    jdbc连接oracle数据库功能示例

    主要介绍了jdbc连接oracle数据库功能,结合实例形式详细分析了java基于jdbc连接Oracle数据库的具体操作步骤与相关实现技巧,需要的朋友可以参考下

    酒店预订系统。运用了jsp+servlet+Oracle技术,结合html+css+js.zip

    酒店预订系统。运用了jsp+servlet+Oracle技术,结合html+css+js.zip

    oracle+MySQL+jdbc数据库教程

    本课程提供专业的数据库培训,深入解析Oracle和MySQL这两大主流关系型数据库管理...同时,结合数据库理论与Java编程实践,学员能够在开发过程中高效地集成和操作数据库,从而在软件开发和数据管理领域迈出坚实的一步。

    sql server的jdbc驱动

    帮你实现微软的sql server的jdbc连接,有了...同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。

    JDBC 3.0数据库开发与设计

    8.3.3 JSP文档与XML的结合 8.4 用XML和XSL生成动态页面 8.4.1 建立标准的数据格式 8.4.2 生成动态XML 8.4.3 用XSL作为模板语言 8.4.4 生成HTML 8.5 从XML到Java代码的数据绑定 8.5.1 访问方式选择 8.5.2 ...

    oracle数据库分页代码

    关于oracle 的分页、翻页的java源代码,结合JDBC连接数据库实现,比较基础的JDBC结合swing图形框架实现,适合Java初学者使用

    Java使用JDBC实现Oracle用户认证的方法详解

    主要介绍了Java使用JDBC实现Oracle用户认证的方法,结合实例形式分析了java使用jdbc实现数据库连接、建表、添加用户、用户认证等操作流程与相关注意事项,需要的朋友可以参考下

    基于spring jdbc的上层封装,底层jdbc操作基于JdbcTemplate

    基于spring jdbc的上层封装,底层jdbc操作基于JdbcTemplate,支持MySql、SqlServer、Oracle数据库,强弱类型完美结合 1、mini-jdbc:针对spring jdbc的一些不方便的地方,做了一些封装,大小写不敏感,简化了日常的...

    Oracle调用Java代码过程

    本资源为个人结合网上资料,试验成功。 Oracle后台存储过程中调用Java代码块,以此来访问异构数据库数据(DB2)。 此方式适用场景: 原有业务逻辑均在后台实现,现要加入对异构数据库的数据访问或写入。 异构数据库...

    jsp+oracle

    使用JSP访问Oracle数据库,使用JDBC访问数据库,JDBC-ODBC桥作为JDBC API访问具体数据库的中间环节,是使用JSP访问数据库...访问Oracle 10g的实例来讲解如何在JSP中使用JDBC-ODBC桥结合ODBC驱动程序的机制来访问数据库。

    Oracle数据库的建模与具体设计

    数据库设计最后要考虑的是与要选择的开发软件之间的接口问题,要准备好接口程序,有 些是第三方软件已经备好的,有些是数据库本身要具备的,如jdbc,bde,ado,等与数据库的接口,主要是考虑接口的可用性、效率问题。...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...

    Java JDBC连接数据库常见操作总结

    主要介绍了Java JDBC连接数据库常见操作,结合实例形式总结分析了java基于jdbc连接mysql、Oracle数据库及连接池相关操作技巧,需要的朋友可以参考下

    java实现的连接oracle/mysql数据库功能简单示例【附oracle+mysql数据库驱动包】

    主要介绍了java实现的连接oracle/mysql数据库功能,结合实例形式分析了java基于jdbc连接Oracle与mysql的相关操作技巧,并附带完整实例代码与oracle+mysql数据库驱动包供读者下载参考,需要的朋友可以参考下

    基于Java Swing + MySQL + JDBC 的图书管理系统.zip

    数据分析与报表:与数据仓库技术结合,支持OLAP(在线分析处理)和数据可视化。 移动应用与物联网(IoT):作为数据存储层,支撑大量设备的数据采集、存储和查询需求。 嵌入式系统:在资源有限的环境中,作为轻量...

    flink-connector-debezium:此项目主要应用于数据中台或数据平台的数据总线,支持直接实时监听MySQL、MongoDB、PostgreSQL、Oracle、SQL Server、Db2和Cassandra等数据库的数据变更

    基于Red Hat开源的Debezium组件,和Flink结合,实现在Flink上直接监听各种数据库的Change Log,并且能够利用Flink的特性,输出到不同的位置上,以实现数据总线和实时数仓的构建。此项目主要应用于数据中台或数据平台...

    Navicat Premium 11.0.10 + Patch

    结合了其 Navicat 成员的功能的 Navicat Premium,支持大份 MySQL、SQL Server、SQLite、Oracle 和 PostgreSQL 的功能,包括存储过程、事件、触发器、函数、视图等。 Navicat Premium 能使你简单并快速地在各种...

    JSP聊天+BBS论坛

    通过JDBC与数据库相连。 一、功能 BBS和chatroom两者有机的结合在一起,用户可以在这两部分取得经验值,达到10000分 后升级为巫师,具有踢人、增加动作的权限。一共分三种用户:会员用户、社区用户、 游客 二、中文...

Global site tag (gtag.js) - Google Analytics