[英]How to effectively get “AS” column name like 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.