package com.swift.jdbc_oracle;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import org.junit.After;
import org.junit.Before;
import org.junit.Test; import oracle.jdbc.OracleTypes;
import oracle.jdbc.driver.OracleCallableStatement; public class Oracle_jdbc { String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@192.168.189.101:1521:orcl";
String username = "scott";
String password = "tiger";
Connection conn =null;
PreparedStatement statement = null;
ResultSet rs = null;
CallableStatement call = null;
OracleCallableStatement oraclecall = null; @Before
public void init() throws ClassNotFoundException, SQLException {
Class.forName(driver);
conn = DriverManager.getConnection(url,username,password);
} //普通查询
public void test() throws ClassNotFoundException, SQLException { String sql="select * from emp";
statement = conn.prepareStatement(sql);
rs = statement.executeQuery();
while(rs.next()) {
System.out.println(rs.getInt("empno")+"~"+rs.getString("ename")+"~"+rs.getString("sal")+"~"
+rs.getString("comm")+"~"+rs.getString("deptno"));
}
System.out.println("Test~~~~~~~~~");
}
//访问单返回值存储过程create or replace procedure getYearSal(eno in number,yearsal out number)
//{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
//sql语法格式 {call <procedure-name>[(<arg1>,<arg2>, ...)]}
public void procedure() throws SQLException {
String sql="{call getYearSal(?,?)}";
call = conn.prepareCall(sql);
//输入的和之前preparestatement一样
call.setInt(1, 7788);
//输出的要注册参数是什么类型
call.registerOutParameter(2,OracleTypes.NUMBER);
call.execute();
//要先查询存储过程再输出结果
double yearsal = call.getDouble(2);
System.out.println(yearsal); }
//访问游标返回值存储过程create or replace procedure getEmps(dno in number,emps out sys_refcursor) public void procedure2() throws SQLException {
String sql="{call getEmps(?,?)}";
call = conn.prepareCall(sql);
//输入的和之前preparestatement一样
call.setInt(1, 20);
//输出的要注册参数是什么类型
call.registerOutParameter(2,OracleTypes.CURSOR);
call.execute();
//要先查询存储过程再输出结果
Object o = call.getObject(2);
rs=(ResultSet)o;
while(rs.next()) {
System.out.println(rs.getInt("empno")+"~"+rs.getString("ename")+"~"+rs.getString("sal")+"~"
+rs.getString("comm")+"~"+rs.getString("deptno"));
}
}
//访问游标返回值存储过程(OracleCallableStatement)create or replace procedure getEmps(dno in number,emps out sys_refcursor) public void procedure3() throws SQLException {
String sql="{call getEmps(?,?)}";
oraclecall = (OracleCallableStatement) conn.prepareCall(sql);
//输入的和之前preparestatement一样
oraclecall.setInt(1, 20);
//输出的要注册参数是什么类型
oraclecall.registerOutParameter(2,OracleTypes.CURSOR);
oraclecall.execute();
//要先查询存储过程再输出结果
rs = oraclecall.getCursor(2);
while(rs.next()) {
System.out.println(rs.getInt("empno")+"~"+rs.getString("ename")+"~"+rs.getString("sal")+"~"
+rs.getString("comm")+"~"+rs.getString("deptno"));
}
}
//访问单返回值存储函数create or replace function x(eno in number) return number
//{?= call <procedure-name>[(<arg1>,<arg2>, ...)]} public void function() throws SQLException {
String sql="{?= call x(?)}";
call = conn.prepareCall(sql);
//输入的和之前preparestatement一样
call.setInt(2, 7788);
//输出的要注册参数是什么类型
call.registerOutParameter(1,OracleTypes.NUMBER);
call.execute();
//要先查询存储过程再输出结果
double yearsal = call.getDouble(1);
System.out.println(yearsal); }
//访问单返回值存储函数create or replace function x(eno in number) return number
//不用这个格式{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}用存储函数select方法
@Test
public void function2() throws SQLException{
String sql="select x(7788) yearsal from dual";//不能多写一个; 写;会报无效字符异常
statement=conn.prepareStatement(sql);
rs= statement.executeQuery();
while(rs.next()) {
System.out.println(rs.getInt("yearsal"));
}
} @After
public void close() throws SQLException {
if(rs!=null) {
rs.close();
}
if(statement!=null) {
statement.close();
}
if(conn!=null) {
conn.close();
} } }

需要先把Oracle包倒到项目中ojdbc14-10.2.0.1.0.jar

Oracle 的jdbc方法的更多相关文章

  1. Java JDBC Thin Driver 连接 Oracle 三种方法说明(转载)

    一.JDBC 连接Oracle 说明 JDBC 的应用连接Oracle 遇到问题,错误如下: ORA-12505,TNS:listener does not currently know of SID ...

  2. Oracle使用JDBC进行增删改查 表是否存在

    Oracle使用JDBC进行增删改查 数据库和表 table USERS (   USERNAME VARCHAR2(20) not null,   PASSWORD VARCHAR2(20) ) a ...

  3. [转]oracle 11g jdbc jar包在哪个文件目录

    oracle 11g jdbc jar包在哪个文件目录 一. 如果装了Oracle数据库的话, 大致是这样的目录:     D:\oracle\product\11.2.0\client_1\oui\ ...

  4. oracle 11g jdbc jar包在哪个文件目录

    一. 如果装了oracle数据库的话, 大致是这样的目录:    D:\oracle\product\11.2.0\client_1\oui\jlib\classes12.jar 或者    D:\o ...

  5. maven项目无法导入Oracle的jdbc连接jar包【我】

    导入一个maven项目,启动一直报错 找不到Oracle的jdbc连接驱动Class, 用Eclipse导入 ojdbc14.jar 连接包,各种方法都无效,无法引入到部署后的lib目录中,可以直接放 ...

  6. IBM WebSphere MQ的oracle的jdbc

    一.IBM WebSphere MQ7.0的jdbc支持数据库有: DB2 Informix Informix_With_Date_Format Microsoft_SQL_Server Oracle ...

  7. oracle 表迁移方法 (二) 约束不失效

    DB:11.2.0.3.0 在oracle 表迁移方法 (一)中,只是move了一张普通的表,如果表的字段带有主键约束呢 ? [oracle@db01 ~]$ sqlplus / as sysdba ...

  8. 【转】PLSQL developer 连接不上64位Oracle 的解决方法

    PLSQL developer 连接不上64位Oracle 的解决方法 快乐无极 , 2012/06/13 10:10 , 开发文档 , 评论(6) , 阅读(140430) , Via 本站原创 大 ...

  9. 转:ORACLE的JDBC连接方式:OCI和THIN

    oracle的jdbc连接方式:oci和thin oci和thin是Oracle提供的两套Java访问Oracle数据库方式. thin是一种瘦客户端的连接方式,即采用这种连接方式不需要安装oracl ...

随机推荐

  1. SmartRF Flash Programmer突然打不开显示界面的办法【亲测有效】

    在尝试打开任务管理器结束任务之后重新打开依然无果,在尝试了SmartRF Flash Programmer卸载重装无数次之后依然无果的况状,我被SmartRF Flash Programmer存在界面 ...

  2. ubuntu使用ppa源安装最新版本的git

    国内也有ubuntu镜像源.但是里面的git都是1.9版本.最新的已经是2.3了 1 首先使用将ppa源加入Ubuntu,交大家 sudo add-apt-repository ppa:pdoes/p ...

  3. JavaScript Date 学习心得

    1.要创建一个日期对象,使用new 操作符和Date构造函数即可: var date=new Date() 在调用Date构造函数而不传递参数的情况下,新创建的对象可以自动获得当前日期和时间.必须传入 ...

  4. 实现Nginx中使用PHP-FPM时记录PHP错误日志的配置方法

    最近在本地搭建的LNMP的开发环境.为了开发的时候不影响前端的正常开发就屏蔽的PHP里面php.ini中的一些错误提示.但是这样一来,就影响到了后端开发的一些问题比如不能及时调试开发中的一些问题 ng ...

  5. C# 和 Linux 时间戳转换

            /// <summary>         /// 时间戳转为C#格式时间         /// </summary>         /// <par ...

  6. 如何绘制ER图

    先画出多个实体(用长方形表示),然后是联系类型(菱形),和属性(椭圆).

  7. C++中的虚函数表

    (感谢http://blog.csdn.net/haoel/article/details/1948051/) C++中的虚函数的作用主要是实现了多态的机制. 多态,简而言之就是用父类型别的指针指向其 ...

  8. iOS 8 提供 TestFlight 方便开发者测试软件 (转)

    原文地址:http://tech2ipo.com/66893 TestFlight / via iMore 作者: Nick Arnott   译者:翛凌 原文:iMore  iOS 应用程序的测试对 ...

  9. Redis数据类型(字符串)

    Redis存放的字符串为二进制是安全的.字符串长度支持到512M. incr 递增数字INCR key 当存储的字符串是整数时,redis提供了一个实用的命令INCR,其作用是让当前键值递增,并返回递 ...

  10. 阿里前端笔试总结--H5面试题

    转载网址 https://blog.csdn.net/qq_20913021/article/details/51351801 1.有一个长度未知的数组a,如果它的长度为0就把数字1添加到数组里面,否 ...