gpt4 book ai didi

java - Oracle Java 存储过程命令行交互

转载 作者:行者123 更新时间:2023-12-01 16:41:47 24 4
gpt4 key购买 nike

我有一个有趣的要求。

我们需要在 Java 存储过程中进行命令行交互。尽管使用dbms_java.grant_permission命令授予了适当的权限,但我还是遇到了java.io.IOException,我从System.in读取使用java.io.InputStreamReader。

问题出在哪里?

Java 源代码在这里:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.SQLException;


import oracle.jdbc.driver.OracleDriver;

public class ExecuteInteractiveBatch {

public static void aFunction() {

Connection connection = null;
try {
int rowFetched = 0;

connection = new OracleDriver().defaultConnection();

Statement stmt = connection.createStatement();

ResultSet rs = stmt.executeQuery("SELECT count(1) cnt from sometable where c = 2");

int count = 0;
if (rs.next()) {
count = rs.getInt(1);
}
rs.close();
stmt.close();
rs = null;
stmt = null;
if (count == 1) {
System.out.println("Do you want to continue?");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String response = reader.readLine();
if ("Y".equalsIgnoreCase(response)) {
stmt = connection.createStatement();
int rowsAffected = stmt.executeUpdate("DELETE from sometable where c=2");
System.out.println("" + rowsAffected + " row(s) deleted");
stmt.close();
}
}
} catch (IOException ex) {
ex.printStackTrace();
} catch (SQLException ex) {
ex.printStackTrace();
} finally {

try {
if (connection != null || !connection.isClosed()) {
connection.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}

最佳答案

您无法从 Oracle 内部对控制台执行 I/O...不能在 java 中,不能在 PL/SQL 中,任何地方都不能。 Oracle 运行在与用户不同的进程中,甚至很可能是在不同的计算机上,并且 java 存储过程正在该进程中运行。您将需要在客户端系统上运行一些 Java 代码来执行控制台 I/O。

关于java - Oracle Java 存储过程命令行交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1159329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com