MSSQL 和 JDBC 读取 DBCC USEROPTIONS
Posted
技术标签:
【中文标题】MSSQL 和 JDBC 读取 DBCC USEROPTIONS【英文标题】:MSSQL and JDBC read 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)
【问题讨论】:
【参考方案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
。
【讨论】:
以上是关于MSSQL 和 JDBC 读取 DBCC USEROPTIONS的主要内容,如果未能解决你的问题,请参考以下文章
DBCC DBREINDEX重建索引提高SQL Server性能