2017-12-08 1 views
0

私はSQLクエリを持っています。あまりにも多くのBOが関与しているため、1000を超える列を含む非常に大きなクエリを形成しています。だから私は手前で列の数を見つけることができ、1000の列のエラーを処理するためにいくつかのロジックを適用するいくつかの方法が必要です。クエリを実行する前にSQLでカラム数を取得する方法は?つまりResultSetMetaData以外の方法

カラムカウントを取得するクエリを解析すると役立つでしょう。しかし、それを実装する方法を取得していない。

注:既に以下のコードを試してみましたが、結果が出ていますが、クエリを実行したくない、それはコストがかかります。

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(); 
    } 
+0

「LIMIT」を試しましたか? – ThomasEdwin

+0

'LIMIT'は列用ではない行用です。 @ThomasEdwin – user3662708

+0

ThomasEdwinの考え方は、 'where rownum = 0'ではコストがかからず、ゼロ行(DBMSが直ちに検出する)を検索するので、単なる列情報しか得られないということです。 –

答えて

0

SELECT文の後に多数のワイルドカードを使用してSQLクエリを推測しますか?ワイルドカードが使用されていない場合、SELECTとFROMの間でSQLクエリ部分を解析して列番号を取得することができます。未知の属性のような大きな結果があると聞いたら、 SQLテーブルがデータソースであると言うことができれば、クエリ結果もデータソースであると言えるでしょう。 SQLテーブルの場合、それに含まれる列(属性)を非常に明確に定義しています。列を指定せずにSQLクエリを作成すると、データソースが不明なエンティティになります。いくつかのBIシステムを作成しようとしていますか?はいの場合は、テーブルのメタデータを取得し、この情報に基づいて特定のクエリを作成することを検討する必要があります。

+0

クエリは異なるテーブルやカラムからデータを取得してUIに表示するため、多くのカラムがクエリをフェッチするようにバインドされています。さらに多くの列をフェッチする責任があるいくつかの列値のためのハイパーリンクがあるので、回避することはできません。あなたは何か考えがある場合は、selectとfromの間でどのようにクエリ部分を解析することができますか? – Shitalb1

+0

私はまだあなたが必要なものすべてを手に入れる方法を持っていると思っています。私の意見は良いparctises(ユーザーがSQL querieなどを書くことを許可しないでください)に基づいているソースの。String [] column = sql.substring(sql.indexOf( "SELECT")+ 6、sql.indexOf( "FROM()"という名前の列を解析する簡単な方法は非常に厄介です。 "))split("、 ") – Majlanky

2

それはのような昔ながらの選択クエリの場合:あなたのクエリはあなたには、いくつかの余分を書く必要がfn(col,'blah blah')などの機能が含まれている場合は

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; 

select col1,col2 as xyz, col3,col4... from ... where ...

あなたはこのような何かを行うことができますそのような機能を識別して適切に処理するコード。

+0

はい、これは以前の記事のコメントに解説されていますが、プログラマがクエリ作成(連結)アルゴリズムを知っている場合、作成中に列数をカウントし、コードを作成し、後で解析します – Majlanky

関連する問題