java调用数据库oracle,使用JDBC从Java使用Oracle数据库解析器

I'm writing a tool in Java which submits statements to a database, which are later run. I'm using JDBC to connect to the database. The database is Oracle 10g.

Before the statements are written to the database I want to parse them to check when they run later there will be no problems. I looked into using an ANTLR solution to this as there are grammars available, but surely If I have a connection to the database there must be a way to use the databases built in parser.

So essentially my question is:

Is there a way using JDBC I can make a call to the database parser passing it an SQL statement and it will return me some sort of feedback, telling me if it was successful or any error messages?

Any help is greatly appreciated,

Many thanks.

Edit:

Using connection.prepareStatement does not seem to work for instance this outputs parsed successfully!

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;

}

The soultion I used is as follows:

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;

}

解决方案

I have no idea what exactly do you want to achiveve but maybe yo migh try to use package DBMS_SQL and it's method PARSE. This works only with DML statements only. This is what Oracle SQL Developer does.

This parser might be used for DML statements too. For PL/SQL it will need some tweaking. As far as I know nobody spent enough time to create a real fully validating parser for Oracle's DDL.

Here is an example how I use it:

declare

l_cursor number := dbms_sql.open_cursor;

l_offset number := -1 ;

begin

begin

dbms_sql.parse( l_cursor, :st, dbms_sql.native );

exception when others then

l_offset := dbms_sql.last_error_position;

end;

dbms_sql.close_cursor( l_cursor );

:off := l_offset;

end;

Simply execute this block. Pass one input parameter of type VARCHAR2(String) (max 32KB) and one output parameter NUMBER.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值