【发布时间】:2011-09-07 00:51:25
【问题描述】:
我正在尝试使用以下代码在我的数据库服务器上运行 PL/SQL 语句。
public class Main {
public static void main(String[] args) {
String jdbcURL = "jdbc:oracle:thin:@172.22.88.9:1521/xavier.i.com";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String user = "bigdb";
String password = "fakepassword";
String result = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
conn = DriverManager.getConnection(jdbcURL, user, password);
result = runStatement(conn,
"{begin ANALYZE TABLE BIGDB.scr_fct_exact_access
ESTIMATE STATISTICS; end}");
} catch (Exception ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
}
}
private static String runStatement(Connection con, String statement)
throws Exception {
PreparedStatement cstmt = con.prepareStatement(statement);
cstmt.execute(); // this is line 58
cstmt.close();
return count;
}
}
在运行代码时,我得到以下异常:
java.sql.SQLSyntaxErrorException: ORA-00900: 无效的 SQL 语句
在 oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)
在 oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
在 oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:837)
在 oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:445)
在 oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
在 oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523)
在 oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
在 oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1010) 时间:-1307015416548在 oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1315)
在 oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3576)
在 oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3677)
在 oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1374)
在 Main.prepareStatement(Main.java:58)
在 Main.main(Main.java:29)
出了什么问题,我该如何解决?
【问题讨论】: