【发布时间】:2015-03-29 03:35:23
【问题描述】:
我有一个名为 setup 的 SQL 脚本,它建立一些设置,然后声明一个名为 salespack 的 PL/SQL 包
setup.sql:
set verify off
set feedback off
set serveroutput on;
set linesize 200;
@Package/pack.sql
@Package/packbody.sql
我有一个名为 main.java 的文件,它尝试运行上述 SQL 脚本,然后调用包,但这似乎不起作用。如何使用jdbc调用SQL脚本,声明PL/SQL包,然后使用包中的函数。我得到的错误是调用stmt.execute();是无效的 SQL 语句。
main.java:
import java.sql.*;
import java.io.*;
class main
{
public static void main (String args [])
throws SQLException, IOException
{
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
String connect = "jdbc:oracle:thin:@vmaddress:1521:xe";
Connection conn = DriverManager.getConnection (connect, "user", "pass");
//Perform setup
//Load packages, allow output, establish sale database
//Make sure to run the main script from dbSetup to have fresh data
CallableStatement callstmt = conn.prepareCall ("@setup.sql");
callstmt.execute();
callstmt.close();
CallableStatement callstmt2 = conn.prepareCall ("{ ? = call salepack.getspname(?) }");
callstmt2.registerOutParameter (1, Types.VARCHAR);
int id = 23; // the id is hard-coded here for simplicity
callstmt2.setInt(2, id);
callstmt2.execute();
String name = callstmt2.getString(1);
System.out.println ("The salesperson with id of " + id + " is " + name);
callstmt2.close();
conn.close();
}
}
【问题讨论】:
-
您似乎有一个 SQLPlus 脚本。如果你想使用它,你需要调用 SQLPlus 客户端。我想您可以从您的 Java 应用程序调用 SQLPlus 可执行文件,假设 Java 应用程序运行在安装了完整 Oracle 客户端的机器上。但这将是一个非常奇怪的架构。如果您需要调用 SQLPlus 脚本,那么将其作为应用程序外部安装过程的一部分会更有意义。或者,将代码存储在 Java 应用程序一次可以读取一条语句的位置会更有意义。
-
您是否正在尝试推出自己的应用程序构建过程? Java 可能是该任务的错误语言。尝试像 Groovy 这样的脚本语言。或者,使用现有的软件包之一,例如 FlyWay(无意或暗示认可)。
标签: java sql oracle jdbc plsql