java中怎么使用oracle的序列,过程和函数

供稿:hz-xin.com     日期:2025-05-21
java如何调用oracle函数?

调用数据库里的一个函数

一个函数本质上一个返回一个结果的存储过程,这个例子示范了怎么调用有in、out和in/out参数的函数

***********************************/

CallableStatement cs;

try {

// 调用一个没有参数的函数; 函数返回 a VARCHAR

// 预处理callable语句

cs = connection.prepareCall("{? = call myfunc}");



// 注册返回值类型

cs.registerOutParameter(1, i);



// Execute and retrieve the returned value

cs.execute();

String retValue = cs.getString(1);



// 调用有一个in参数的函数; the function returns a VARCHAR

cs = connection.prepareCall("{? = call myfuncin(?)}");



// Register the type of the return value

cs.registerOutParameter(1, Types.VARCHAR);



// Set the value for the IN parameter

cs.setString(2, "a string");



// Execute and retrieve the returned value

cs.execute();

retValue = cs.getString(1);



// 调用有一个out参数的函数; the function returns a VARCHAR

cs = connection.prepareCall("{? = call myfuncout(?)}");



// Register the types of the return value and OUT parameter

cs.registerOutParameter(1, Types.VARCHAR);

cs.registerOutParameter(2, Types.VARCHAR);



// Execute and retrieve the returned values

cs.execute();

retValue = cs.getString(1); // return value

String outParam = cs.getString(2); // OUT parameter



// 调用有一个in/out参数的函数; the function returns a VARCHAR

cs = connection.prepareCall("{? = call myfuncinout(?)}");



// Register the types of the return value and OUT parameter

cs.registerOutParameter(1, Types.VARCHAR);

cs.registerOutParameter(2, Types.VARCHAR);



// Set the value for the IN/OUT parameter

cs.setString(2, "a string");



// Execute and retrieve the returned values

cs.execute();

retValue = cs.getString(1); // return value

outParam = cs.getString(2); // IN/OUT parameter

} catch (SQLException e) {

}

sequences的原理就是,如果当前的序列不存在,它会创建一个序列,如果存在,它首先要得到当前序列的最大值,然后再加一,实现自增长的功能。用java代码同样也能实现squernces的功能。可能是根据个人的编程习惯有关,我不喜欢在java代码中加入存储过程什么的,我喜欢用方法来实现。如果有用过hibernate的话,就跟简单了。在hibernate里面,只需要配置相应的xml文件,就可以实现自增长的功能

JAVA中使用oracle序列

直接使用
String sql="insert into wf_hxinxi (oid,zsnumber,sortinfo,address,dateinfo)values(SEQ_SYSTEMADD.Nextval,'"+hxinxiVO.getZsnumber()+"','"+hxinxiVO.getSortinfo()+"','"+hw+"','"+hxinxiVO.getDateinfo()+"')";

使用存储过程就更多,看你的传入,和传出情况,

一:无返回值的存储过程
存储过程为:
CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS
BEGIN
INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2);
END TESTA;
然后呢,在java里调用时就用下面的代码:
package com.hyq.src;

import java.sql.*;
import java.sql.ResultSet;

public class TestProcedureOne {
public TestProcedureOne() {
}
public static void main(String[] args ){
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521: hyq ";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
CallableStatement cstmt = null;

try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, " hyq ", " hyq ");
CallableStatement proc = null;
proc = conn.prepareCall("{ call HYQ.TESTA(?,?) }");
proc.setString(1, "100");
proc.setString(2, "TestOne");
proc.execute();
}
catch (SQLException ex2) {
ex2.printStackTrace();
}
catch (Exception ex2) {
ex2.printStackTrace();
}
finally{
try {
if(rs != null){
rs.close();
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
}
}
catch (SQLException ex1) {
}
}
}
}
当然了,这就先要求要建张表TESTTB,里面两个字段(I_ID,I_NAME)。
二:有返回值的存储过程(非列表)
存储过程为:
CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) AS
BEGIN
SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1;
END TESTB;
在java里调用时就用下面的代码:
package com.hyq.src;

public class TestProcedureTWO {
public TestProcedureTWO() {
}
public static void main(String[] args ){
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:hyq";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, " hyq ", " hyq ");
CallableStatement proc = null;
proc = conn.prepareCall("{ call HYQ.TESTB(?,?) }");
proc.setString(1, "100");
proc.registerOutParameter(2, Types.VARCHAR);
proc.execute();
String testPrint = proc.getString(2);
System.out.println("=testPrint=is="+testPrint);
}
catch (SQLException ex2) {
ex2.printStackTrace();
}
catch (Exception ex2) {
ex2.printStackTrace();
}
finally{
try {
if(rs != null){
rs.close();
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
}
}
catch (SQLException ex1) {
}
}
}
}

}
注意,这里的proc.getString(2)中的数值2并非任意的,而是和存储过程中的out列对应的,如果out是在第一个位置,那就是proc.getString(1),如果是第三个位置,就是proc.getString(3),当然也可以同时有多个返回值,那就是再多加几个out参数了。
三:返回列表
由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分,
1, 建一个程序包。如下:
CREATE OR REPLACE PACKAGE TESTPACKAGE AS
TYPE Test_CURSOR IS REF CURSOR;
end TESTPACKAGE;
2,建立存储过程,存储过程为:
CREATE OR REPLACE PROCEDURE TESTC(p_CURSOR out TESTPACKAGE.Test_CURSOR) IS
BEGIN
OPEN p_CURSOR FOR SELECT * FROM HYQ.TESTTB;
END TESTC;
可以看到,它是把游标(可以理解为一个指针),作为一个out 参数来返回值的。
在java里调用时就用下面的代码:
package com.hyq.src;
import java.sql.*;
import java.io.OutputStream;
import java.io.Writer;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import oracle.jdbc.driver.*;

public class TestProcedureTHREE {
public TestProcedureTHREE() {
}
public static void main(String[] args ){
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:hyq";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;

try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, "hyq", "hyq");

CallableStatement proc = null;
proc = conn.prepareCall("{ call hyq.testc(?) }");
proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);
proc.execute();
rs = (ResultSet)proc.getObject(1);

while(rs.next())
{
System.out.println("<tr><td>" + rs.getString(1) + "</td><td>"+rs.getString(2)+"</td></tr>");
}
}
catch (SQLException ex2) {
ex2.printStackTrace();
}
catch (Exception ex2) {
ex2.printStackTrace();
}
finally{
try {
if(rs != null){
rs.close();
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
}
}
catch (SQLException ex1) {
}
}
]
]

函数更是简单,具体的别人已经给更详细的说明,参考这个
http://zhidao.baidu.com/question/1567623.html?si=8

你是说JDBC中使用吧?就是跟在SQLPlus中使用一样,JAVA中的SQL语句同样是交给Oracle服务端来执行的。

JAVA中使用oracle序列

直接使用
String sql="insert into wf_hxinxi (oid,zsnumber,sortinfo,address,dateinfo)values(SEQ_SYSTEMADD.Nextval,'"+hxinxiVO.getZsnumber()+"','"+hxinxiVO.getSortinfo()+"','"+hw+"','"+hxinxiVO.getDateinfo()+"')";

使用存储过程就更多,看你的传入,和传出情况,

一:无返回值的存储过程
存储过程为:
CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS
BEGIN
INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2);
END TESTA;

java应用程序操作oracle数据库的问题
import java.sql.*;public class TextOracle_AddTemplate { public static void main(String ags[]){ add();} public static void add(){ Connection ct = null;\/\/与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果 PreparedStatement ps = null;\/\/表示预编译的 SQL 语句的对象...

在Java中建立Oracle数据库表怎么建啊???
jdbc表示当前通过Java的数据库连接进行数据库访问;subProtocol表示通过某种驱动程序支持的数据库连接机制;subName表示在当前连接机制下的具体名称;hostname表示主机名;port表示相应的连接端口;DatabaseName表示要连接的数据库的名称。这里以与Oracle数据库的连接为例:连接Oracle 8\/8i\/9i数据库(用thin模式)url...

JAVA中存文件到ORACLE数据库里怎么做?
在Java中,要将文件存储到Oracle数据库的BLOB字段中,首先需要读取文件内容为流。这可以通过使用Java的FileInputStream类实现。接着,将这个流转换为二进制字符串形式,可以通过将流读取为字节数组,然后使用Base64编码转换为字符串来完成。在将文件存储到数据库之前,确保你已经建立了到Oracle数据库的连接。

java连接Oracle数据库
Connection conn = null;Class.forName("oracle.jdbc.driver.OracleDriver");\/\/加入oracle的驱动,“”里面是驱动的路径 String url = "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL";\/\/ 数据库连接,oracle代表链接的是oracle数据库;thin:@MyDbComputerNameOrIP代表的是数据库所在的IP地址(...

如何在ORACLE中使用JAVA存储过程
create or replace procedure queryempinfo(eno in number,pename out varchar2,psal out number,pjob out varchar2)as begin --得到该员工的姓名 月薪和职位 select ename, sal, job into pename, psal, pjob from emp where empno = eno;end;Java调用Oracle的存储过程 try { Class.forName(...

java连接Oracle数据库,报错软件包oracle.jdbc不存在,下了个ojdbc6_g...
您好,一般的java开发都是在myeclipse下进行的。如果在连接oracle数据库中,提示jdbc不存在,那么可以直接将我们的jar文件直接导入即可 方法如下:在java项目下,点击右键--properties---java build path--选择 add external achievers ;最后,将你要的jar 包 选择进去--ok--apply 即可。希望我的回答能...

Java程序使用OCI驱动连接Oracle数据库
要使java web正常的通过oci驱动访问oracle 还需要客户端正确的配置一下相关变量 主要如下 对于windows系统并使用oracle客户端时 把%ORACLE_HOME%\\lib加到PATH环境变量 把%ORACLE_HOME%\\jdbc\\lib\\classes jar加到CLASSPATH环境变量里 也可以把classes jar拷贝到tomcat的man\\lib目录下 对于windows系统并使用...

微信公众平台 java开发 能用oracle数据库吗
微信公众平台是可以开发java调用oracle这类型的接口的,一般通过MyBatis连接Oracle数据库。举例如下:1、先建立一个数据库表,名为PERSON_INFO,建表SQL如下:create TABLE PERSON_INFO (id number(12,0) PRIMARY KEY,name varchar2(20) NOT NULL,gender char(1) DEFAULT ' ',remark varchar2(1000),...

java中 jdbc 连接 oracle数据库的问题
另外,确保你的JDBC驱动已经正确添加到项目的类路径中。如果是使用Maven项目,可以在pom.xml文件中添加如下依赖:<dependency> <groupId>com.oracle<\/groupId> <artifactId>ojdbc8<\/artifactId> <version>19.3.0.0<\/version> <\/dependency> 如果使用的是其他构建工具,可以参考Oracle官方网站上的文档来...

java如何将dmp文件导入到oracle数据库中?
需要注意的是,执行过程中可能会遇到异常,这时我们需要捕获异常信息,进行相应的处理。如果出现异常,记录日志信息并返回异常信息。通过以上步骤,我们可以成功地将数据库备份为DMP文件。在导入DMP文件到Oracle数据库时,我们同样需要使用DOS命令进行操作,具体命令如下:`imp username\/password@dbname file=dmp...