0
我正在读取一个CSV文件到我的java程序中,并且它的每条记录都有一个sql查询。我想解析这个(Select)SQL查询来查找这些查询中提到的表名和列名。从SQL查询中获取表名和列名字符串
例如选择年龄,从员工姓名
结果:
----表:[雇员]
----列:年龄,姓名]
注意:我不想触发其他我将使用的查询ResultSetMetaData
我正在读取一个CSV文件到我的java程序中,并且它的每条记录都有一个sql查询。我想解析这个(Select)SQL查询来查找这些查询中提到的表名和列名。从SQL查询中获取表名和列名字符串
例如选择年龄,从员工姓名
结果:
----表:[雇员]
----列:年龄,姓名]
注意:我不想触发其他我将使用的查询ResultSetMetaData
对于上述示例中的简单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);
}
以最通常的形式,这将是一场噩梦。想象一下,选择在PIVOT或MATCH_RECOGNIZE子句中创建的列......涉及列(分析函数,聚合,col1 + col2)的表达式......您需要做什么? – mathguy
也许你可以试试JSqlParser:https://github.com/JSQLParser/JSqlParser – diufanman
你需要使用任何可用的oracle sql解析器,使用解析器库来标记输入并获得期望的结果。看看这个线程是否可以帮助你http://stackoverflow.com/questions/5735791/parser-for-oracle-sql –