You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SymmetricDS连接SQL Server读取元数据时遇AbstractMethodError错误

问题排查:SymmetricDS连接SQL Server 2016触发AbstractMethodError

问题背景

SQL Server版本:2016(v13.0.4259.0),平台NT64x
通过SymmetricDS执行命令测试连接:

dbsql --engine store-001

store-001配置:

engine.name=store-001
db.driver=net.sourceforge.jtds.jdbc.Driver
db.url=jdbc:jtds:sqlserver://192.168.16.123:1433/crawlers_sm;useCursors=true;bufferMaxMemory=10240;lobBuffer=5242880
db.user=user
db.password=password
registration.url=http://localhost:31415/sync/corp-000
group.id=store
external.id=001
job.routing.period.time.ms=5000
job.push.period.time.ms=10000
job.pull.period.time.ms=10000

执行后抛出异常:

An exception occurred.  Please see the following for details:
-------------------------------------------------------------------------------
java.lang.AbstractMethodError
        at net.sourceforge.jtds.jdbc.JtdsConnection.isValid(JtdsConnection.java:2833)
        at org.apache.commons.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:590)
        at org.apache.commons.dbcp2.PoolableConnection.validate(PoolableConnection.java:334)
        at org.apache.commons.dbcp2.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:653)
        at org.apache.commons.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:109)
        at org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:649)
        at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:531)
        at org.jumpmind.db.util.ResettableBasicDataSource.createDataSource(ResettableBasicDataSource.java:55)
        at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:731)
        at org.jumpmind.db.platform.JdbcDatabasePlatformFactory.determineDatabaseNameVersionSubprotocol(JdbcDatabasePlatformFactory.java:271)
 [wrapped] org.jumpmind.db.sql.SqlException: Error while reading the database metadata: null
        at org.jumpmind.db.platform.JdbcDatabasePlatformFactory.determineDatabaseNameVersionSubprotocol(JdbcDatabasePlatformFactory.java:287)
        at org.jumpmind.db.platform.JdbcDatabasePlatformFactory.create(JdbcDatabasePlatformFactory.java:238)
        at org.jumpmind.symmetric.ClientSymmetricEngine.createDatabasePlatform(ClientSymmetricEngine.java:367)
        at org.jumpmind.symmetric.ClientSymmetricEngine.createDatabasePlatform(ClientSymmetricEngine.java:326)
        at org.jumpmind.symmetric.AbstractCommandLauncher.getDatabasePlatform(AbstractCommandLauncher.java:287)
        at org.jumpmind.symmetric.DbSqlCommand.executeWithOptions(DbSqlCommand.java:73)
        at org.jumpmind.symmetric.AbstractCommandLauncher.execute(AbstractCommandLauncher.java:153)
        at org.jumpmind.symmetric.DbSqlCommand.main(DbSqlCommand.java:42)

连接Oracle正常,已确认SymmetricDS兼容SQL Server。

问题根源

java.lang.AbstractMethodError是因为JTDS驱动版本过低,未实现JDBC 4.0规范要求的Connection.isValid()方法,而SymmetricDS依赖的Apache DBCP2连接池会在验证连接时调用该方法,导致报错。

解决方案

方案1:替换为微软官方SQL Server JDBC驱动(推荐)

JTDS已停止维护,微软官方驱动对新版SQL Server和JDBC规范支持更好:

  1. 修改配置文件:
    • 将db.driver改为:com.microsoft.sqlserver.jdbc.SQLServerDriver
    • 将db.url调整为官方驱动格式:
      db.url=jdbc:sqlserver://192.168.16.123:1433;databaseName=crawlers_sm;useCursors=true;bufferMaxMemory=10240;lobBuffer=5242880
      
  2. 添加驱动jar包:
    下载对应Java版本的SQL Server JDBC驱动(如mssql-jdbc-12.4.0.jre8.jar),放入SymmetricDS的lib目录,同时删除原有的jtds.jar。

方案2:升级JTDS驱动到最新版(不推荐)

如果坚持使用JTDS,需升级到最后维护版本(1.3.2):

  1. 下载最新版jtds-1.3.2.jar替换SymmetricDSlib目录中的旧版本。
  2. 保持原有配置不变,重新测试连接。

验证步骤

修改配置/替换驱动后,重新执行:

dbsql --engine store-001

若连接成功则问题解决。

内容的提问来源于stack exchange,提问作者Marine Fighter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 09:25:42