【问题标题】:MSSQL and JDBC read DBCC USEROPTIONSMSSQL 和 JDBC 读取 DBCC USEROPTIONS
【发布时间】:2016-01-22 20:46:21
【问题描述】:

我正在尝试读取以下命令返回的一些属性

DBCC USEROPTIONS

如何在 JDBC 中使用以下命令?

    List<ResultVO> list = getJdbcTemplate().query(sql, new ParameterizedBeanPropertyRowMapper<ResultVO>() {
        @Override
        public ResultVO mapRow(ResultSet rs, int rowNumber) throws SQLException {
            System.out.println(rowNumber);
            ResultVO v = new ResultVO();
            v.setSetOption(rs.getString(0));
            v.setValue(rs.getString(1));
            //--
            return v;
        }
    }, (List<String>) null);

抛出异常如下:

Caused by: org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [SELECT DBCC USEROPTIONS]; The index 1 is out of range.; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: The index 1 is out of range.
    at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:106)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)

【问题讨论】:

    标签: sql-server jdbc spring-jdbc


    【解决方案1】:

    错误信息的第一行表明你的代码试图执行 SQL 语句

    SELECT DBCC USEROPTIONS
    

    但这不是有效的 T-SQL 语法。 T-SQL 语句

    DBCC USEROPTIONS
    

    确实返回了一个有效的 ResultSet,如下面的 JDBC 代码所示:

    try (Connection conn = DriverManager.getConnection(connectionUrl)) {
        try (
                Statement s = conn.createStatement();
                ResultSet rs = s.executeQuery("DBCC USEROPTIONS")) {
            ResultSetMetaData rsmd = rs.getMetaData();
            for (int i = 1; i <= rsmd.getColumnCount(); i++) {
                System.out.printf("[%s]: %s%n", rsmd.getColumnName(i), rsmd.getColumnTypeName(i));
            }
            System.out.println();
            while (rs.next()) {
                System.out.printf("%s: %s%n", rs.getString(1), rs.getString(2));
            }
        }
    } catch (Exception e) {
        e.printStackTrace(System.err);
    }
    

    产生

    [Set Option]: nvarchar
    [Value]: nvarchar
    
    textsize: -1
    language: us_english
    dateformat: mdy
    datefirst: 7
    lock_timeout: -1
    quoted_identifier: SET
    ansi_null_dflt_on: SET
    ansi_warnings: SET
    ansi_padding: SET
    ansi_nulls: SET
    concat_null_yields_null: SET
    isolation level: read committed
    

    看来您需要调整 Spring JDBC 代码以仅执行 DBCC USEROPTIONS

    【讨论】:

      猜你喜欢
      • 2010-12-29
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      相关资源
      最近更新 更多