2016-07-04 12 views
0

をJDBC PreparedStatementを使用してクエリプランを取得し、resultSet.getObjectは、XMLSQLサーバー上なステートメントを使用して

Connection conn = getConnection(); 
     String query = " SET SHOWPLAN_XML on "; 
     Statement st = conn.createStatement(); 
     boolean execute=st.execute(query); 
     log.info("execute status {} " , execute); 
     query = " SELECT ATMPROFILES.TERMID as COLUMNID, ATMPROFILES.TERMID as COLUMNNAME FROM ATMPROFILES (NOLOCK) " 
       + " WHERE Authprocessname = 'ATMST' " 
       + "ORDER BY ATMPROFILES.TERMID "; 
     ResultSet rs = st.executeQuery(query); 
     while(rs.next()) 
     { 
      Object object = rs.getObject(1); 
      log.info("Query Plan {} ", object); 
     } 

としてクエリプランを返します。しかし、私はのPreparedStatementを通じて同じことを実行する場合は、クエリ実行計画

Connection conn = getConnection(); 
     String query = " SET SHOWPLAN_XML on "; 
     PreparedStatement ps = conn.prepareStatement(query); 
     boolean execute = ps.execute(); 
     log.info("execute status {} " , execute); 

     query = " SELECT ATMPROFILES.TERMID as COLUMNID, ATMPROFILES.TERMID as COLUMNNAME FROM ATMPROFILES (NOLOCK) " 
       + " WHERE Authprocessname = 'ATMST' " 
       + "ORDER BY ATMPROFILES.TERMID "; 
     ps=conn.prepareStatement(query); 
     execute=ps.execute(); 
     log.info("execute status {} " , execute); 
     ResultSet rs = ps.getResultSet(); 
     while(rs.next()) 
     { 
      Object object = rs.getObject(1); 
      // here it returns selected object 
      log.info("Query Plan {} ", object); 

     } 
insteadof実際の結果を返します

PreparedStatementを介してこれを達成するためのアイデア。

答えて

0

準備完了の文としてSET SHOWPLAN_XML ONを実行すると参照が見つかりませんでした。ただし、このステートメントを直接実行し、実際の照会を準備済みのステートメントとして実行すると、望ましい結果が得られるはずです。コード内:

Connection conn = getConnection(); 
String showplanQuery = "SET SHOWPLAN_XML ON"; 
Statement st = conn.createStatement(); 
st.execute(showplanQuery); 

String actualQuery = "SELECT ATMPROFILES.TERMID FROM ATMPROFILES (NOLOCK) "; 
PreparedStatement ps=conn.prepareStatement(actualQuery); 
ps.execute(); 
ResultSet rs = ps.getResultSet(); 
while(rs.next()) 
{ 
    Object object = rs.getObject(1); 
    // should log the query plan 
    log.info("Query Plan {} ", object); 
} 

希望します。

+0

私はこのイヤラーを試してみました。結果セットは 'ps.getResultSet();'のためにヌルです – vels4j

+0

@ vels4j:どのSQL ServerのバージョンとJDBCドライバを使用していますか?私は自宅でSQL Server 2012、jTDS 1.3.1、あなたとは異なるテーブルを試しました。しかし、私はこれらの違いが重要であるとは思わなかった。私の例の 'ps.getResultSet()'は 'null'ではありませんでした。 –

+0

maven経由でsqljdbc4-4.0.2206.100.jarを使用する – vels4j

関連する問題