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

最新文章

  1. 【Android】Eclipse自动编译NDK/JNI的三种方法
  2. linux split 及优化
  3. 再谈扩展方法,从string.IsNullOrEmpty()说起
  4. 理解 OpenStack + Ceph (3):Ceph RBD 接口和工具 [Ceph RBD API and Tools]
  5. 自己签发免费ssl证书
  6. ajax 跨域 headers JavaScript ajax 跨域请求 +设置headers 实践
  7. JAVA题 矩形
  8. sublime text2支持ng
  9. C#中Config文件中,特殊符号的书写方法。
  10. spring 的properties解析
  11. activiti搭建(一)初始化数据库
  12. 学会使用git
  13. PHP PDO获取结果集
  14. 1:环境安装与介绍:canopy
  15. MCI 函数与命令
  16. java 调用mysql的存储过程(简单示例)
  17. typescript入门基础
  18. [转]BTC手续费计算,如何设置手续费
  19. 以英雄联盟的方式建模,谈对依赖注入(DI)的理解以及Autofac的用法(一)
  20. vlc-android 的编译过程

热门文章

  1. C# List(T).Reverse 方法 顺序反转
  2. 比特币--私钥-&gt;公钥-&gt;钱包地址
  3. Homebrew 配置
  4. 通用代码——makefile文件
  5. mysql-查询的案例
  6. The thirteen day
  7. 安卓开发:Please ensure that adb is correctly located at……问题解决方案
  8. selenium 服务器端运行命令
  9. selenium googleDrive
  10. HttpWebRequest Post请求webapi