使用 jtds 进行 SqlServer 连接时出现异常
Exception while using jtds for SqlServer connectivity
我正在使用 jtds 驱动程序从 UnixBox 连接到 SQLServer,使用来自 SpringBoot+JPA 应用程序的 windows 身份验证。它是一个独立的应用程序,而不是基于 Web 的应用程序。我可以成功连接到相同的服务器,但是当我尝试使用 JPARepository 保存一些数据时,我收到以下异常:
java.lang.AbstractMethodError: null
at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.setCharacterStream(JtdsPreparedStatement.java:1274) ~[jtds-1.3.1.jar:1.3.1]
查看了JtdsPreparedStatement
中对应的源码,发现没有这个方法的实现:
@Override
public void setCharacterStream(int parameterIndex, Reader reader,
long length) throws SQLException {
// TODO Auto-generated method stub
throw new AbstractMethodError();
}
按照建议here;我们可以实现相同的,它应该可以工作。有人可以解释一下我如何注册 JtdsPreparedStatement
的实现以在运行时由 Spring 容器而不是默认容器选择吗?或者是否还有其他可用选项?
Edit : JtdsPreparedStatement
有一个默认作用域的构造函数;甚至不能延长它
有一个开放的jTDS bug。简而言之,JDBC标准规定了两种不同的设置字符流的方法:
旧方法签名:
public void setCharacterStream(int parameterIndex, Reader reader, long length) throws SQLException
新方法签名:
public void setCharacterStream(int parameterIndex, Reader reader, int length) throws SQLException
区别在于最后一个参数从长整型改为整型。
jTDS 还没有实现 Hibernate 使用的新方法,因此你得到了 AbstractMethodError。
这里有 2 个选项:
- 换成微软JDBC驱动,支持此方法
- 获取 jTDS 的源代码并自己实现方法(很可能是将旧方法转发给新方法)
根据我的经验,不要指望很快就会有正式版本。
我正在使用 jtds 驱动程序从 UnixBox 连接到 SQLServer,使用来自 SpringBoot+JPA 应用程序的 windows 身份验证。它是一个独立的应用程序,而不是基于 Web 的应用程序。我可以成功连接到相同的服务器,但是当我尝试使用 JPARepository 保存一些数据时,我收到以下异常:
java.lang.AbstractMethodError: null
at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.setCharacterStream(JtdsPreparedStatement.java:1274) ~[jtds-1.3.1.jar:1.3.1]
查看了JtdsPreparedStatement
中对应的源码,发现没有这个方法的实现:
@Override
public void setCharacterStream(int parameterIndex, Reader reader,
long length) throws SQLException {
// TODO Auto-generated method stub
throw new AbstractMethodError();
}
按照建议here;我们可以实现相同的,它应该可以工作。有人可以解释一下我如何注册 JtdsPreparedStatement
的实现以在运行时由 Spring 容器而不是默认容器选择吗?或者是否还有其他可用选项?
Edit : JtdsPreparedStatement
有一个默认作用域的构造函数;甚至不能延长它
有一个开放的jTDS bug。简而言之,JDBC标准规定了两种不同的设置字符流的方法:
旧方法签名:
public void setCharacterStream(int parameterIndex, Reader reader, long length) throws SQLException
新方法签名:
public void setCharacterStream(int parameterIndex, Reader reader, int length) throws SQLException
区别在于最后一个参数从长整型改为整型。
jTDS 还没有实现 Hibernate 使用的新方法,因此你得到了 AbstractMethodError。
这里有 2 个选项:
- 换成微软JDBC驱动,支持此方法
- 获取 jTDS 的源代码并自己实现方法(很可能是将旧方法转发给新方法)
根据我的经验,不要指望很快就会有正式版本。