【发布时间】:2020-08-14 13:07:46
【问题描述】:
我正在使用 Teiid 在 datetimeoffset 列中插入空值,但 PreparedStatement.setNull(index, Types.TIMESTAMP) 没有插入空值。我得到的错误是这样的:
原因:java.sql.SQLException:远程 com.microsoft.sqlserver.jdbc.SQLServerException:不允许从数据类型 varbinary 到 datetimeoffset 的隐式转换。使用 CONVERT 函数运行此查询。
在 com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262)
在 com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1632)
在 com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:600)
在 com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:522)
在 com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7225)
在 com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:3053)
在 com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:247)
在 com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:222)
在 com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(SQLServerPreparedStatement.java:471)
在 org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:537) 在 org.teiid.translator.jdbc.JDBCUpdateExecution.executeTranslatedCommand(JDBCUpdateExecution.java:315) ...省略了27个常用框架
以下是我的 SQL Server 2012 版本的数据源详细信息:
<driver name="sqlserver" module="com.microsoft.sqlserver">
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
<xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class>
</driver>
驱动版本为:mssql-jdbc-8.2.0.jre8
我尝试在没有 Teiid 的情况下插入 null(通过使用 Microsoft jdbc 驱动程序建立 sql 连接)并且它正在工作。该表仅包含一列,其数据类型为 datetimeoffset。
请就除此之外我可以尝试的方法提出任何想法。提前致谢!
【问题讨论】:
-
NULL与此无关;错误非常具体:“不允许从数据类型 varbinary 到 datetimeoffset 的隐式转换。请使用 CONVERT 函数运行此查询。” 您正在尝试将varbinary插入到 @987654328 @;这就是问题所在。 -
其实我只是在执行 PreparedStatment.setNull(),我没有在其中插入除 NULL 之外的任何值。我的 PreparedStatment 的 paramterMap 在调用 setNull(); 后显示 {1=null};
-
teiid 的架构详细信息,将 datetimeoffset 读取为 object(34),这可能会导致问题吗?
标签: sql-server teiid