2017-01-05 79 views
0

我正在读取一个CSV文件到我的java程序中,并且它的每条记录都有一个sql查询。我想解析这个(Select)SQL查询来查找这些查询中提到的表名和列名。从SQL查询中获取表名和列名字符串

例如选择年龄,从员工姓名

结果:

----表:[雇员]

----列:年龄,姓名]

注意:我不想触发其他我将使用的查询ResultSetMetaData

+0

以最通常的形式,这将是一场噩梦。想象一下,选择在PIVOT或MATCH_RECOGNIZE子句中创建的列......涉及列(分析函数,聚合,col1 + col2)的表达式......您需要做什么? – mathguy

+0

也许你可以试试JSqlParser:https://github.com/JSQLParser/JSqlParser – diufanman

+0

你需要使用任何可用的oracle sql解析器,使用解析器库来标记输入并获得期望的结果。看看这个线程是否可以帮助你http://stackoverflow.com/questions/5735791/parser-for-oracle-sql –

回答

0

对于上述示例中的简单SQL语句,我将使用一些简单的字符串方法来获取信息。例如:

public static void main (String[]args) { 
    String sql = "Select age,name,adress,id from Employee where id = 3"; 
    String[] columns = sql.substring(sql.indexOf("Select")+7, sql.indexOf("from")-1).split(","); 
    String table = sql.substring(sql.indexOf("from")+5).split(" ")[0]; 
    System.out.println(Arrays.toString(columns)); 
    System.out.println(table); 
} 
相关问题