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
相关产品推荐
相关产品推荐

