簡體   English   中英

如何在執行查詢之前獲取SQL中的列數? 即ResultSetMetaData以外的其他方式

[英]How to get column count in SQL before executing the query? i.e. way other than ResultSetMetaData

我有一個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();
    }

如果它是一個普通的舊選擇查詢,例如:

select col1,col2 as 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')類的函數,則需要編寫一些額外的代碼來標識此類函數並適當地進行處理。

我猜您的SQL查詢在SELECT語句后使用了很多通配符,對嗎? 如果不使用通配符,則可以在SELECT和FROM之間解析SQL查詢部分以獲取列號。如果我聽到您對未知屬性有如此大的結果,我會感到有些不安。 如果我們可以說SQL表是數據源,那么我們也可以說查詢結果也是數據源。 對於SQL表,我們已經非常明確地定義了它包含哪些列(屬性)。 如果您創建不帶列說明的SQL查詢,則您具有未知實體的數據源。 您是否要創建一些BI系統? 如果是,則應考慮獲取表的元數據並根據此信息創建特定的查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM