java - 如何在执行查询之前获取 SQL 中的列数?即 ResultSetMetaData 以外的方式

标签 java sql oracle jdbc

我有一个sql查询。由于涉及太多的BO,它形成了包含超过1000列的非常大的查询。所以我需要某种方法可以预先找到列数,然后应用一些逻辑来处理 1000 列错误。

解析查询以获取列数可能会有所帮助。但不知道如何实现。

注意:已经尝试过下面的代码,它给了我结果,但我不想执行查询,这是昂贵的。

PreparedStatement pstmt;
    try {
        pstmt = getConnection().prepareStatement(sql);
        ResultSetMetaData meta = pstmt.getMetaData();
        System.out.println(meta.getColumnCount());

    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

最佳答案

如果它是一个普通的旧选择查询,例如:

选择 col1,col2 作为 xyz, col3,col4... from ... where ...

你可以这样做:

String select="select";//"SELECT" if yours is in caps
String from="from";//"FROM" if yours is in caps
String cols = sql.substring(sql.indexOf(select)+select.length(), sql.indexOf(from)); 
int colCount = cols.split(",").length;

如果您的查询包含诸如 fn(col,'blah blah') 之类的函数,您需要编写一些额外的代码来识别此类函数并进行适当的处​​理。

关于java - 如何在执行查询之前获取 SQL 中的列数?即 ResultSetMetaData 以外的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47711121/

相关文章:

java - 如何从线程中获取反馈? java

java - 如何在Java中使用准备好的语句进行选择查询?

sql - 快速介绍如何使用oracle xml数据类型

mysql - IIF 不像 Access 2007 中的语句

sql - 适当的排名

SQL 错误 : ORA-00933: SQL command not properly ended 00933. 00000 - "SQL command not properly ended"

java - 将 HQL 结果汇总到列表中

java - 少于两个变量

java - Spring Boot 找不到特定于配置文件的属性文件

java - xml 字符串到文件