Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在sql server上使用jdbc PreparedStatement获取查询计划_Java_Sql Server_Jdbc_Prepared Statement - Fatal编程技术网

Java 在sql server上使用jdbc PreparedStatement获取查询计划

Java 在sql server上使用jdbc PreparedStatement获取查询计划,java,sql-server,jdbc,prepared-statement,Java,Sql Server,Jdbc,Prepared Statement,使用statent,resultSet.getObject以xml形式返回查询计划 Connection conn = getConnection(); String query = " SET SHOWPLAN_XML on "; Statement st = conn.createStatement(); boolean execute=st.execute(query); log.info("execute status {

使用statent,resultSet.getObject以xml形式返回查询计划

 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执行相同的语句,它将返回实际结果而不是QueryPlan

 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); 

        }

通过PreparedStatement实现这一点的想法。

我没有找到任何参考资料,说明为什么在上执行
SET SHOWPLAN\u XML作为一个PreparedStatement将不起作用;但是,当您直接运行此语句并将实际查询作为准备好的语句运行时,应该会得到所需的结果。代码:

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); 
}

希望对您有所帮助。

我还没有找到任何参考资料说明为什么在
上执行
SET SHOWPLAN\u XML作为准备好的语句将不起作用;但是,当您直接运行此语句并将实际查询作为准备好的语句运行时,应该会得到所需的结果。代码:

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); 
}

希望能有帮助。

我很早就试过了,没用。
ps.getResultSet()的结果集为空
@vels4j:您使用的是哪个SQL Server版本和JDBC驱动程序?我试着在家使用SQL Server 2012、jTDS 1.3.1和一个与您不同的表;然而,我没想到这些差异会有多大影响。我的示例中的
ps.getResultSet()
不是
null
,然后通过mavenI使用sqljdbc4-4.0.2206.100.jar尝试了这个早期工具,但没有成功。
ps.getResultSet()的结果集为空
@vels4j:您使用的是哪个SQL Server版本和JDBC驱动程序?我试着在家使用SQL Server 2012、jTDS 1.3.1和一个与您不同的表;然而,我没想到这些差异会有多大影响。我的示例中的
ps.getResultSet()
不是
null
,然后通过maven使用sqljdbc4-4.0.2206.100.jar