Java代码调用存储过程和存储方法
准备一个oracle 的JDBC jar 包:ojdbc14_11g.jar
首先找到你的 oracle 安装位置,例如:
1.创建一个JDBC数据库连接工具类:
- package com.test.db;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- public class JDBCUtils {
- private static String driver = "oracle.jdbc.OracleDriver";
- private static String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
- private static String user = "数据库连接名";
- private static String password = "数据库连接密码";
- //注册数据库驱动
- static{
- try {
- Class.forName(driver);
- } catch (Exception e) {
- throw new ExceptionInInitializerError(e);
- }
- }
- /**
- * 获取数据库连接
- * @return
- */
- public static Connection getConnection(){
- try {
- return DriverManager.getConnection(url,user,password);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return null;
- }
- /**
- * 释放数据库连接资源
- * @param conn
- * @param st
- * @param rs
- */
- public static void release(Connection conn,Statement st,ResultSet rs){
- if (rs!=null) {
- try {
- rs.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }finally{
- rs = null;
- }
- }
- if (st!=null) {
- try {
- st.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }finally{
- st = null;
- }
- }
- if (conn!=null) {
- try {
- conn.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }finally{
- conn = null;
- }
- }
- }
- }
package com.test.db; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class JDBCUtils { private static String driver = "oracle.jdbc.OracleDriver";
private static String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
private static String user = "数据库连接名";
private static String password = "数据库连接密码"; //注册数据库驱动
static{
try {
Class.forName(driver);
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
} /**
* 获取数据库连接
* @return
*/
public static Connection getConnection(){
try {
return DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
} /**
* 释放数据库连接资源
* @param conn
* @param st
* @param rs
*/
public static void release(Connection conn,Statement st,ResultSet rs){
if (rs!=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
rs = null;
}
} if (st!=null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
st = null;
}
} if (conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
conn = null;
}
}
}
}
2.调用 存储过程:
- package com.test.demo;
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import org.junit.Test;
- import oracle.jdbc.internal.OracleTypes;
- import oracle.jdbc.oracore.OracleType;
- import com.hwb.db.JDBCUtils;
- /**
- * 调用存储过程 一个输入参数,多个 输出参数
- * @author Administrator
- *
- */
- public class ProcedureTest {
- /**
- * create or replace procedure selectUserById(uid in number,
- uName out VARCHAR2,
- uAge out number,
- uSex out char)
- */
- @Test
- public void testProcedure(){
- String sql = "{call selectUserById(?,?,?,?)}";
- Connection conn = null;
- CallableStatement call = null;
- try {
- //得到一个数据库连接
- conn = JDBCUtils.getConnection();
- //通过连接创建出statement
- call = conn.prepareCall(sql);
- //对于in参数,赋值
- call.setInt(1, 2); // (第几个问号,要赋的值)
- //对out参数,声明
- call.registerOutParameter(2, OracleTypes.VARCHAR); //(第几个问号,声明的类型)
- call.registerOutParameter(3, OracleTypes.NUMBER);
- call.registerOutParameter(4, OracleTypes.CHAR);
- //执行调用
- call.execute();
- //取出结果
- String userName = call.getString(2);
- int userAge = call.getInt(3);
- String userSex = call.getString(4);
- System.out.println("用户姓名:"+userName+"\n\t年龄:"+userAge+"\n\t性别:"+userSex);
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- //关闭连接,释放资源
- JDBCUtils.release(conn, call, null);
- }
- }
- }
package com.test.demo; import java.sql.CallableStatement;
import java.sql.Connection; import org.junit.Test; import oracle.jdbc.internal.OracleTypes;
import oracle.jdbc.oracore.OracleType; import com.hwb.db.JDBCUtils; /**
* 调用存储过程 一个输入参数,多个 输出参数
* @author Administrator
*
*/
public class ProcedureTest { /**
* create or replace procedure selectUserById(uid in number,
uName out VARCHAR2,
uAge out number,
uSex out char)
*/ @Test
public void testProcedure(){ String sql = "{call selectUserById(?,?,?,?)}"; Connection conn = null;
CallableStatement call = null;
try {
//得到一个数据库连接
conn = JDBCUtils.getConnection();
//通过连接创建出statement
call = conn.prepareCall(sql);
//对于in参数,赋值
call.setInt(1, 2); // (第几个问号,要赋的值)
//对out参数,声明
call.registerOutParameter(2, OracleTypes.VARCHAR); //(第几个问号,声明的类型)
call.registerOutParameter(3, OracleTypes.NUMBER);
call.registerOutParameter(4, OracleTypes.CHAR); //执行调用
call.execute(); //取出结果
String userName = call.getString(2);
int userAge = call.getInt(3);
String userSex = call.getString(4); System.out.println("用户姓名:"+userName+"\n\t年龄:"+userAge+"\n\t性别:"+userSex); } catch (Exception e) {
e.printStackTrace();
}finally{
//关闭连接,释放资源
JDBCUtils.release(conn, call, null);
} }
}
3.调用存储方法:
- package com.test.demo;
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import oracle.jdbc.internal.OracleTypes;
- import org.junit.Test;
- import com.hwb.db.JDBCUtils;
- /**
- * 调用存储函数,一个输入参数,一个输出参数
- * @author Administrator
- *
- */
- public class FunctionTest {
- /**
- * create or replace function selectAge(eno in number)
- return number
- */
- @Test
- public void testFunction(){
- //{?= call <procedure-name>[<arg1>,<arg2>...]}
- String sql = "{call selectAge(?)}";
- Connection conn = null;
- CallableStatement call = null;
- try {
- //得到数据库连接
- conn = JDBCUtils.getConnection();
- //通过数据库连接创建statement
- call = conn.prepareCall(sql);
- //对于输出参数,声明
- call.registerOutParameter(1, OracleTypes.NUMBER);
- //对于输入参数,赋值
- call.setInt(2, 3);
- //执行调用
- call.execute();
- //获取返回的结果
- int age = call.getInt(1);
- System.out.println("该用户年龄:"+age);
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- JDBCUtils.release(conn, call, null);
- }
- }
- }
package com.test.demo; import java.sql.CallableStatement;
import java.sql.Connection; import oracle.jdbc.internal.OracleTypes; import org.junit.Test; import com.hwb.db.JDBCUtils; /**
* 调用存储函数,一个输入参数,一个输出参数
* @author Administrator
*
*/
public class FunctionTest { /**
* create or replace function selectAge(eno in number)
return number
*/
@Test
public void testFunction(){
//{?= call <procedure-name>[<arg1>,<arg2>...]}
String sql = "{call selectAge(?)}";
Connection conn = null;
CallableStatement call = null;
try {
//得到数据库连接
conn = JDBCUtils.getConnection(); //通过数据库连接创建statement
call = conn.prepareCall(sql); //对于输出参数,声明
call.registerOutParameter(1, OracleTypes.NUMBER); //对于输入参数,赋值
call.setInt(2, 3); //执行调用
call.execute(); //获取返回的结果
int age = call.getInt(1); System.out.println("该用户年龄:"+age);
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCUtils.release(conn, call, null);
}
}
}
4.调用存储过程,一个输入参数,返回一个查询结果集合
- package com.hwb.demo;
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import java.sql.ResultSet;
- import org.junit.Test;
- import oracle.jdbc.internal.OracleCallableStatement;
- import oracle.jdbc.internal.OracleTypes;
- import com.hwb.db.JDBCUtils;
- /**
- * 存储过程 一个输入参数,返回一个查询结果集合
- * @author Administrator
- *
- */
- public class CursorTest {
- /**
- * create or replace package Mypackage as
- procedure queryUserList(uid in number,userList out usercursor);
- end mypackage;
- */
- @Test
- public void testCursor(){
- String sql = "{call Mypackage.queryUserList(?,?) }";
- Connection conn = null;
- CallableStatement call = null;
- ResultSet rs = null;
- try {
- //得到数据库连接
- conn = JDBCUtils.getConnection();
- //通过数据库连接创建statement
- call = conn.prepareCall(sql);
- //对于输入参数,赋值
- call.setInt(1, 1);
- //对于输出参数,声明
- call.registerOutParameter(2, OracleTypes.CURSOR);
- //执行调用
- call.execute();
- //将CallableStatement 强转成 OracleCallableStatement 用来获取光标类型Cursor,并得到结果ResultSet
- rs = ((OracleCallableStatement)call).getCursor(2);
- //遍历 ResultSet
- while (rs.next()) {
- //根据类型和列名取值
- int id = rs.getInt("user_id"); //括号内为 列名
- String user_name = rs.getString("user_name");
- int age = rs.getInt("user_age");
- String sex = rs.getString("user_sex");
- System.out.println("查询到的用户信息:\n\tid:"+id+"\n\t姓名:"+user_name
- +"\n\t年龄:"+age+"\n\t性别:"+sex);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- JDBCUtils.release(conn, call, rs);
- }
- }
- }
package com.hwb.demo; import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet; import org.junit.Test; import oracle.jdbc.internal.OracleCallableStatement;
import oracle.jdbc.internal.OracleTypes; import com.hwb.db.JDBCUtils;
/**
* 存储过程 一个输入参数,返回一个查询结果集合
* @author Administrator
*
*/
public class CursorTest { /**
* create or replace package Mypackage as
procedure queryUserList(uid in number,userList out usercursor);
end mypackage;
*/
@Test
public void testCursor(){
String sql = "{call Mypackage.queryUserList(?,?) }"; Connection conn = null;
CallableStatement call = null;
ResultSet rs = null;
try {
//得到数据库连接
conn = JDBCUtils.getConnection();
//通过数据库连接创建statement
call = conn.prepareCall(sql); //对于输入参数,赋值
call.setInt(1, 1);
//对于输出参数,声明
call.registerOutParameter(2, OracleTypes.CURSOR);
//执行调用
call.execute();
//将CallableStatement 强转成 OracleCallableStatement 用来获取光标类型Cursor,并得到结果ResultSet
rs = ((OracleCallableStatement)call).getCursor(2);
//遍历 ResultSet
while (rs.next()) {
//根据类型和列名取值
int id = rs.getInt("user_id"); //括号内为 列名
String user_name = rs.getString("user_name");
int age = rs.getInt("user_age");
String sex = rs.getString("user_sex");
System.out.println("查询到的用户信息:\n\tid:"+id+"\n\t姓名:"+user_name
+"\n\t年龄:"+age+"\n\t性别:"+sex);
} } catch (Exception e) {
e.printStackTrace();
}finally{
JDBCUtils.release(conn, call, rs);
}
}
}
Java代码调用存储过程和存储方法的更多相关文章
- java通过JDBC连接Oracle并调用存储过程和存储方法
初始配置:电脑安装oracle 11g(这里也可使是其它版本也可,此教程演示为11g),java环境,eclipse,oracle关于jdbc的jar包. 一,在scott用户下首先要有存储过程和存储 ...
- java程序调用存储过程和存储函数
java程序调用存储过程 jdbcUtil.java文件 package cn.itcast.oracle.utils; import java.sql.Connection; import java ...
- Java代码调用Oracle的存储过程,存储函数和包
Java代码调用存储过程和存储函数要使用CallableStatement接口 查看API文档: 上代码: java代码调用如下的存储过程和函数: 查询某个员工的姓名 月薪 职位 create or ...
- java代码调用数据库存储过程
由于前边有写java代码调用数据库,感觉应该把java调用存储过程也写一下,所以笔者补充该篇! package testSpring; import java.sql.CallableStatemen ...
- java程序调用存储过程
java程序调用存储过程 PL/SQL子程序,很多情况下是给应用程序来调用的,所有我们要掌握使用其他编程语言来调用我们写好的存储过程.下面我们介绍下使用java调用Oracle的存储过程. ...
- Java JDBC调用存储过程:无参、输入带参、输出及输出带参
Java JDBC调用存储过程:无参.输入带参.输出及输出带参 示例代码: package xzg; import java.sql.CallableStatement; import java.sq ...
- 【转】使用JavaParser获得Java代码中的类名、方法形参列表中的参数名以及统计总的文件个数与不能解析的文件个数
遍历目录查找Java文件: public static void ergodicDir(File dir, HashSet<String> argNameSet, HashSet<S ...
- Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件
本文通过Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件,代码如下: import java.io.File; import java.io.IOException; import ...
- 我也谈谈 代码调用存储过程超时,SQL Server Management Studio里运行很快的问题
最近遇到了一个问题就是 一个执行速度很快的存储过程,在代码中调用的时候却超时了. 后来看到了两篇文章: 其中一篇是这样介绍的 今天同事用代码调用存储过程时超时,在SQL Server Manageme ...
随机推荐
- ubuntu设置root权限默认密码
1.默认root密码是随机的,即每次开机都有一个新的root密码.我们可以在终端输入命令 sudo passwd,然后输入当前用户的密码2.终端会提示我们输入新的密码并确认,此时的密码就是root新密 ...
- 修改zend studio字体大小
第一步:进入设置窗口 windows -> preferences第二步:进入修改字体的选项卡. General -> Appearance -> Colors and ...
- Chrome DevTools的15个使用技巧(译)
谷歌浏览器如今是Web开发者们所使用的最流行的网页浏览器.伴随每六个星期一次的发布周期和不断扩大的强大的开发功能,Chrome变成了一个必须掌握的工具.大多数前端开发者可能熟悉关于chorme的许多特 ...
- media(适配)
媒体类型 1.all 所有媒体 2.braille 盲文触觉设备 3.embossed 盲文打印机 4.print 手持设备 5.projection 打印预览 ...
- Json&XML比较
1.定义 1.1 XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用 ...
- echart 时间轴、以及y轴值过大但是变化不大显示感觉不出变化的问题+弹出框拖动div事件
1.时间轴 echart 提供了一种图表,如果x轴是一个时间范围,并且是连续的,如果用传统的数据驱动会很慢,所以用时间轴的方式 function initCurve(_data){ var resul ...
- 【LDAP】LDAP常用命令解析
ldapadd -x 进行简单认证-D 用来绑定服务器的DN-h 目录服务的地址-w 绑定DN的密码-f 使用ldif文件进行条目添加的文件例子 ldapadd -x -D &qu ...
- Django models python3搭载mysql
1 django默认支持sqlite,mysql, oracle,postgresql数据库. <1> sqlite django默认使用sqlite的数据库,默认自带sqlite ...
- D的小L
D的小L 描述 一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给匡匡出了个题目想难倒匡匡(小L很D吧),有一个数n(0<n<10),写出1 ...
- JS类型和类 小记录
七种数据类型 number 记住二进制是0b开头 八进制0开头,后来ES5添加了0o开头 十六进制是0x开头 string var s = ' + ' // 无回车符号 或 var s = ` ` / ...