J'ai une exigence drôle.Oracle Java procédure stockée Interaction de ligne de commande
Nous devons avoir une interaction de ligne de commande dans une procédure stockée Java. En dépit d'accorder des autorisations appropriées en utilisant les commandes dbms_java.grant_permission
, je rencontre java.io.IOException
, où je lis de System.in
en utilisant java.io.InputStreamReader
.
Où est le problème?
La source Java est ici:
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();
}
}
}
}
Où est le problème? Probablement dans la trace de la pile que vous n'avez pas incluse dans la question. :) –
peut-être inclure le code que vous avez créé ainsi – northpole
Qu'est-ce qui appelle 'aFunction'? Pourriez-vous nous fournir une trace de pile fournissant des informations d'erreur détaillées? –