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

Katalon数据库连接异常:SQLServerConnection转MySQLConnection失败

解决Katalon中SQL Server连接的类型转换异常

你遇到的'com.microsoft.sqlserver.jdbc.SQLServerConnection' to class 'com.mysql.jdbc.Connection'异常,核心原因是类加载冲突或者错误的Connection类型导入——你的代码里大概率不小心引用了MySQL的Connection类,而非标准的JDBC Connection接口。下面是具体的排查和解决步骤:

1. 检查自定义类的导入语句

打开你的sqlconnect类,确保顶部的导入是标准的JDBC Connection,而不是MySQL的实现:

// 正确的导入
import java.sql.Connection
// 错误的导入(如果存在请删除)
// import com.mysql.jdbc.Connection

虽然你在代码里写了(java.sql.Connection)DriverManager.getConnection(url),但如果类顶部导入了MySQL的Connection,编译器会优先使用那个,导致类型不匹配。

2. 验证Katalon的数据库驱动配置

  • 打开Project > Settings > Database,确认你选择的是SQL Server驱动,而非MySQL。
  • 检查驱动jar包:确保项目中只包含SQL Server的驱动(比如mssql-jdbc-x.x.x.jreX.jar),如果之前添加过MySQL的驱动jar,建议移除——多个数据库驱动共存可能引发类加载冲突,导致JVM错误地加载了MySQL的Connection类。

3. 修正自定义连接类的细节

我调整了你的sqlconnect类,做了几个关键优化:

  • 显式加载SQL Server驱动(JDBC4.0+虽然支持自动加载,但显式加载能避免驱动未被识别的问题)
  • 移除不必要的强制类型转换(DriverManager.getConnection()本身就返回java.sql.Connection)
  • 添加连接类名打印,方便验证连接是否正确
import java.sql.Connection
import java.sql.DriverManager
import java.sql.ResultSet
import java.sql.Statement
import com.kms.katalon.core.annotation.Keyword

public class sqlconnect {
    private static Connection connection1 = null;

    @Keyword
    def connectDB(String server, String port, String dbname, String username, String password){
        // 显式加载SQL Server驱动
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
        // 使用Groovy字符串插值让代码更简洁
        String url = "jdbc:sqlserver://${server}:${port};databaseName=${dbname};user=${username};password=${password}"
        
        // 确保旧连接关闭
        if(connection1 != null && !connection1.isClosed()){
            connection1.close()
        }
        // 无需强制转换,直接获取标准Connection
        connection1 = DriverManager.getConnection(url)
        // 打印连接类名,验证是否为SQL Server的实现
        println("当前连接类: " + connection1.getClass().getName())
        return connection1
    }

    @Keyword
    def executeQuery(String queryString) {
        Statement stm = connection1.createStatement()
        ResultSet rs = stm.executeQuery(queryString)
        return rs
    }

    @Keyword
    def closeDatabaseConnection() {
        if(connection1 != null && !connection1.isClosed()){
            connection1.close()
        }
        connection1 = null
    }

    @Keyword
    def execute(String queryString) {
        Statement stm = connection1.createStatement()
        boolean result = stm.execute(queryString)
        return result
    }
}

4. 额外排查点

  • 检查项目的External Libraries目录,确认没有同时存在MySQL和SQL Server的驱动jar。如果确实需要连接多个数据库,务必确保所有代码中使用的Connection都是java.sql.Connection接口,而非具体厂商的实现类。
  • 在Katalon的Database Settings中点击Test Connection,确认配置的SQL Server连接能正常连通——如果这里测试失败,说明驱动或配置本身有问题,需要先解决这个基础问题。

内容的提问来源于stack exchange,提问作者Vel Guru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:55:20