【问题标题】:Get table names and column names from SQL query String从 SQL 查询字符串中获取表名和列名
【发布时间】:2017-05-19 12:47:26
【问题描述】:

我正在将一个 CSV 文件读入我的 java 程序,它的每条记录中都有一个 sql 查询。我想解析这个 (Select)SQL 查询以查找这些查询中提到的表名和列名。

例如从员工中选择年龄、姓名

结果:

---- 表格:[员工]

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

注意:我不想触发查询,否则我会使用 ResultSetMetaData

【问题讨论】:

  • 以最一般的形式,这将是一场噩梦。想象一下选择在 PIVOT 或 MATCH_RECOGNIZE 子句中创建的列...涉及列的表达式(分析函数、聚合、col1 + col2)...您需要这个做什么?
  • 也许你可以试试JSqlParser:github.com/JSQLParser/JSqlParser
  • 您需要使用任何可用的 oracle sql 解析器,标记输入并使用解析器库获得所需的结果。看看这个帖子对你有没有帮助stackoverflow.com/questions/5735791/parser-for-oracle-sql
  • 您可以使用 DBMS_SQL.describe_columns

标签: java sql string oracle11g


【解决方案1】:

对于像上面示例这样的简单 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    相关资源
    最近更新 更多