【发布时间】:2013-12-23 13:55:17
【问题描述】:
我正在用 Java 编写一个工具,它将语句提交到数据库,然后运行。我正在使用 JDBC 连接到数据库。数据库是Oracle 10g。
在将语句写入数据库之前,我想解析它们以检查它们何时运行以后不会出现问题。我考虑使用 ANTLR 解决方案,因为有可用的语法,但如果我有与数据库的连接,肯定有一种方法可以使用内置于解析器的数据库。
所以基本上我的问题是:
有没有一种使用 JDBC 的方法,我可以调用数据库解析器,向它传递一条 SQL 语句,它会返回一些反馈,告诉我它是否成功或任何错误消息?
非常感谢任何帮助, 非常感谢。
编辑:
使用 connection.prepareStatement 似乎不起作用,例如此输出解析成功!
String statement = "WHERE DISTINCT SELECT";
Connection connection;
try {
connection = this.controller.getDataSource().getConnection();
connection.prepareStatement(statement);
connection.close();
mainPanel.setPositiveText("Parsed Successfully!");
} catch (Exception e) {
mainPanel.setNegativeText("ERROR: " + e.getMessage());
return;
}
我使用的soultion如下:
String statement = "DECLARE "
+ "myNumber NUMBER; "
+ "BEGIN "
+ "myNumber := SYS.dbms_sql.open_cursor; "
+ "SYS.DBMS_SQL.PARSE(myNumber, '" + text + "', SYS.DBMS_SQL.NATIVE); "
+ "END;";
Connection connection;
try {
connection = this.controller.getDataSource().getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(statement);
preparedStatement.execute();
connection.close();
mainPanel.setPositiveText("Parsed Successfully!");
} catch (Exception e) {
mainPanel.setNegativeText("ERROR: " + e.getMessage());
System.out.println(e.getMessage());
return;
}
【问题讨论】:
-
Statement execQuery 或 execUpdate 方法会抛出异常。