「java调用pkl」java调用shell脚本

博主:adminadmin 2022-11-22 05:16:08 42

本篇文章给大家谈谈java调用pkl,以及java调用shell脚本对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java 调用excel vba

这个我以前也遇到过,查了一下结果是不能,因为VBA已经不属于excel范畴了,应该属于VB插件了,而且现在excel开发jar包中已经提供了大量的方法实现比较强大的功能了,只能是重新用java中实现VBA中的功能了。

「java调用pkl」java调用shell脚本

如何使用java语言调用oracle存储过程?

1.api上的方法为 Connection.prepareCall(java.lang.String)

2.prepareCall(String sql)

throws SQLException

参数:sql - 可以包含一个或多个 '?' 参数占位符的 SQL 语句。通常此语句是使用 JDBC 调用转义语法指定的。

3.JDBC API 提供了一个存储过程 SQL 转义语法,该语法允许对所有 RDBMS 使用标准方式调用存储过程。此转义语法有一个包含结果参数的形式和一个不包含结果参数的形式。分别为:

{?= call procedure-name[(arg1,arg2, ...)]}

{call procedure-name[(arg1,arg2, ...)]}

4.示例,无返回值调用:Connection.prepareCall({ call p_test(p1,p2)})

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) {

}

java 如何调用dll?

JAVA以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能。解决JAVA对本地操作的一种方法就是JNI。

JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法。

简单介绍及应用如下:

一、JAVA中所需要做的工作

在JAVA程序中,首先需要在类中声明所调用的库名称,如下:

static {

System.loadLibrary(“goodluck”);

}

在这里,库的扩展名字可以不用写出来,究竟是DLL还是SO,由系统自己判断。

还需要对将要调用的方法做本地声明,关键字为native。并且只需要声明,而不需要具 体实现。如下:

public native static void set(int i);

public native static int get();

然后编译该JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就会生成C/C++的头文件。

例如程序testdll.java,内容为:

public class testdll

{

static

{

System.loadLibrary("goodluck");

}

public native static int get();

public native static void set(int i);

public static void main(String[] args)

{

testdll test = new testdll();

test.set(10);

System.out.println(test.get());

}

}

用javac testdll.java编译它,会生成testdll.class。

再用javah testdll,则会在当前目录下生成testdll.h文件,这个文件需要被C/C++程序调用来生成所需的库文件。

二、C/C++中所需要做的工作

对于已生成的.h头文件,C/C++所需要做的,就是把它的各个方法具体的实现。然后编译连接成库文件即可。再把库文件拷贝到JAVA程序的路径下面,就可以用JAVA调用C/C++所实现的功能了。

接上例子。我们先看一下testdll.h文件的内容:

#i nclude jni.h

#ifndef _Included_testdll

#define _Included_testdll

#ifdef __cplusplus

extern "C" {

#endif

JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass);

JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint);

#ifdef __cplusplus

}

#endif

#endif

在具体实现的时候,我们只关心两个函数原型

JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass); 和

JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint);

这里JNIEXPORT和JNICALL都是JNI的关键字,表示此函数是要被JNI调用的。而jint是以JNI为中介使JAVA的int类型与本地的int沟通的一种类型,我们可以视而不见,就当做int使用。函数的名称是JAVA_再加上java程序的package路径再加函数名组成的。参数中,我们也只需要关心在JAVA程序中存在的参数,至于JNIEnv*和jclass我们一般没有必要去碰它。

好,下面我们用testdll.cpp文件具体实现这两个函数:

#i nclude "testdll.h"

int i = 0;

JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass)

{

return i;

}

JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint j)

{

i = j;

}

编译连接成库文件,本例是在WINDOWS下做的,生成的是DLL文件。并且名称要与JAVA中需要调用的一致,这里就是goodluck.dll 。把goodluck.dll拷贝到testdll.class的目录下,java testdll运行它,就可以观察到结果了。

java怎么调用oracle的过程

java下实现调用oracle的存储过程和函数

在oracle下创建一个test的账户,然后按一下步骤执行:

1.创建表:STOCK_PRICES

--创建表格

CREATE TABLE STOCK_PRICES(

RIC VARCHAR(6) PRIMARY KEY,

PRICE NUMBER(7,2),

UPDATED DATE );

2.插入测试数据:

--插入数据

INSERT INTO stock_prices values('1111',1.0,SYSDATE);

INSERT INTO stock_prices values('1112',2.0,SYSDATE);

INSERT INTO stock_prices values('1113',3.0,SYSDATE);

INSERT INTO stock_prices values('1114',4.0,SYSDATE);

3.建立一个返回游标: PKG_PUB_UTILS

--建立一个返回游标

CREATE OR REPLACE PACKAGE PKG_PUB_UTILS IS

--动态游标

TYPE REFCURSOR IS REF CURSOR;

END PKG_PUB_UTILS;

4.创建和存储过程:P_GET_PRICE

--创建存储过程

CREATE OR REPLACE PROCEDURE P_GET_PRICE

(

AN_O_RET_CODE OUT NUMBER,

AC_O_RET_MSG OUT VARCHAR2,

CUR_RET OUT PKG_PUB_UTILS.REFCURSOR,

AN_I_PRICE IN NUMBER

)

IS

BEGIN

AN_O_RET_CODE := 0;

AC_O_RET_MSG := '操作成功';

OPEN CUR_RET FOR

SELECT * FROM STOCK_PRICES WHERE PRICEAN_I_PRICE;

EXCEPTION

WHEN OTHERS THEN

AN_O_RET_CODE := -1;

AC_O_RET_MSG := '错误代码:' || SQLCODE || CHR(13) || '错误信息:' || SQLERRM;

END P_GET_PRICE;

5.创建函数:

--创建函数:F_GET_PRICE

CREATE OR REPLACE FUNCTION F_GET_PRICE(v_price IN NUMBER)

RETURN PKG_PUB_UTILS.REFCURSOR

AS

stock_cursor PKG_PUB_UTILS.REFCURSOR;

BEGIN

OPEN stock_cursor FOR

SELECT * FROM stock_prices WHERE price v_price;

RETURN stock_cursor;

END;

6.JAVA调用存储过程返回结果集

代码示例:JDBCoracle10G_INVOKEPROCEDURE.java

import java.sql.*;

import oracle.jdbc.OracleCallableStatement;

import oracle.jdbc.OracleTypes;

/* 本例是通过调用oracle的存储过程来返回结果集:

* oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip

*/

public class JDBCoracle10G_INVOKEPROCEDURE {

Connection conn = null;

Statement statement = null;

ResultSet rs = null;

CallableStatement stmt = null;

String driver;

String url;

String user;

String pwd;

String sql;

String in_price;

public JDBCoracle10G_INVOKEPROCEDURE()

{

driver = "oracle.jdbc.driver.OracleDriver";

url = "jdbc:oracle:thin:@localhost:1521:ORCL";

// oracle 用户

user = "test";

// oracle 密码

pwd = "test";

init();

// mysid:必须为要连接机器的sid名称,否则会包以下错:

// java.sql.SQLException: Io 异常: Connection

// refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))

// 参考连接方式:

// Class.forName( "oracle.jdbc.driver.OracleDriver" );

// cn = DriverManager.getConnection(

// "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );

}

public void init() {

System.out.println("oracle jdbc test");

try {

Class.forName(driver);

System.out.println("driver is ok");

conn = DriverManager.getConnection(url, user, pwd);

System.out.println("conection is ok");

statement = conn.createStatement();

// conn.setAutoCommit(false);

// 输入参数

in_price = "3.0";

// 调用函数

stmt = conn.prepareCall("call P_GET_PRICE(?,?,?,?)");

stmt.registerOutParameter(1, java.sql.Types.FLOAT);

stmt.registerOutParameter(2, java.sql.Types.CHAR);

stmt.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR);

stmt.setString(4, in_price);

stmt.executeUpdate();

int retCode = stmt.getInt(1);

String retMsg = stmt.getString(2);

if (retCode == -1) { // 如果出错时,返回错误信息

System.out.println("报错!");

} else {

// 取的结果集的方式一:

rs = ((OracleCallableStatement) stmt).getCursor(3);

// 取的结果集的方式二:

// rs = (ResultSet) stmt.getObject(3);

String ric;

String price;

String updated;

// 对结果进行输出

while (rs.next()) {

ric = rs.getString(1);

price = rs.getString(2);

updated = rs.getString(3);

System.out.println("ric:" + ric + ";-- price:" + price

+ "; --" + updated + "; ");

}

}

} catch (Exception e) {

e.printStackTrace();

} finally {

System.out.println("close ");

}

}

public static void main(String args[])// 自己替换[]

{

new JDBCoracle10G_INVOKEPROCEDURE();

}

}

7.开发JAVA调用函数返回结果集

代码示例:JDBCoracle10G_INVOKEFUNCTION.java

import java.sql.*;

import oracle.jdbc.OracleCallableStatement;

import oracle.jdbc.OracleTypes;

/*

/* 本例是通过调用oracle的函数来返回结果集:

* oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip

*/

public class JDBCoracle10G_INVOKEFUNCTION {

Connection conn = null;

Statement statement = null;

ResultSet rs = null;

CallableStatement stmt = null;

String driver;

String url;

String user;

String pwd;

String sql;

String in_price;

public JDBCoracle10G_INVOKEFUNCTION()

{

driver = "oracle.jdbc.driver.OracleDriver";

url = "jdbc:oracle:thin:@localhost:1521:ORCL";

// oracle 用户

user = "test";

// oracle 密码

pwd = "test";

init();

// mysid:必须为要连接机器的sid名称,否则会包以下错:

// java.sql.SQLException: Io 异常: Connection

// refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))

// 参考连接方式:

// Class.forName( "oracle.jdbc.driver.OracleDriver" );

// cn = DriverManager.getConnection(

// "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );

}

public void init() {

System.out.println("oracle jdbc test");

try {

Class.forName(driver);

System.out.println("driver is ok");

conn = DriverManager.getConnection(url, user, pwd);

System.out.println("conection is ok");

statement = conn.createStatement();

// conn.setAutoCommit(false);

// 输入参数

in_price = "5.0";

// 调用函数

stmt = conn.prepareCall("{? = call F_GET_PRICE(?)}");

// stmt.registerOutParameter(1, java.sql.Types.FLOAT);

// stmt.registerOutParameter(2, java.sql.Types.CHAR);

stmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);

stmt.setString(2, in_price);

stmt.executeUpdate();

// 取的结果集的方式一:

rs = ((OracleCallableStatement) stmt).getCursor(1);

// 取的结果集的方式二:

// rs = (ResultSet) stmt.getObject(1);

String ric;

String price;

String updated;

while (rs.next()) {

ric = rs.getString(1);

price = rs.getString(2);

updated = rs.getString(3);

System.out.println("ric:" + ric + ";-- price:" + price + "; --"

+ updated + "; ");

}

} catch (Exception e) {

e.printStackTrace();

} finally {

System.out.println("close ");

}

}

public static void main(String args[])// 自己替换[]

{

new JDBCoracle10G_INVOKEFUNCTION();

}

}

关于java调用pkl和java调用shell脚本的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-22,除非注明,否则均为首码项目网原创文章,转载请注明出处。