I need to parse sql statements and get column names and table names. I tried with sample code. I got table names but I am stucked to get column names for each table.
-
Why do you need to do that?NilsH– NilsH2013-05-24 11:25:11 +00:00Commented May 24, 2013 at 11:25
-
I am reading few methods in BO API, I got sql statments from those method, now using that sql i need to take table names and column names and store it in database. I am using strings to read sqlNavyah– Navyah2013-05-24 12:08:59 +00:00Commented May 24, 2013 at 12:08
5 Answers
If you really really need to do this then you should look at using a proper parser toolkit like ANTLR. It is quite a steep learning curve but there are grammars around for SQL that others have already built.
Hand-cranking your own parser will lead you down a mess of bugs for anything but the most basic of queries.
1 Comment
What you need is an SQL parser.
You can try JSQLParser, or ZQL.
I have used both successfully for the same thing the you are trying to do.
You can try also sqlparser. This is commercial however and I have no experience using it.
Comments
If you are having ResultSet object then, you can read Column names and Table Names of fired Query.
by using ResultSetMetaData to get MetaData of your query (like table names and column names).
1 Comment
You will need to create a parser for your SQL grammar. ANTLR allows to create such parsers but it can be quite difficult to create a grammar.
Here is a list of exisiting grammar for ANTLR http://www.antlr3.org/grammar/list.html
It contains grammar for mysql, oracle SQL that should work for you.
Comments
Checkout Foundation Parser http://foundationdb.github.io/sql-parser/
Also note JSQLParser is no longer on SourceForge but maintain at https://github.com/JSQLParser/JSqlParser/wiki