kettle 3.2连接MSSQL 2000时,提示:Unable to get information from SQL Server。

本文介绍了使用Kettle3.2连接MSSQL2000时遇到的问题及解决方法。指出必须为MSSQL2000安装sp4补丁才能成功连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个问题困扰了我许久,今天受到一位高人指点,我终于找出了答案。
原因在于:kettle 3.2在连接MSSQL 2000时,必须给MSSQL 2000打上sp4补丁才可以。
### Kettle 中处理间戳错误的方法 当遇到 `Unable to get timestamp from resultset at index 353` 错误,这通常是因为 JDBC 驱动程序在处理特定的间字段遇到了夏令转换问题。具体来说,在某些情况下,JDBC 可能会尝试解析不存在的间(例如由于夏令调整而跳过的一小),从而引发异常。 为了有效解决此问题,可以采取以下几种方法: #### 方法一:配置数据库连接字符串中的区设置 通过修改数据库连接 URL 来指定服务器所在的固定区,而不是依赖本地系统的默认区设定。这样可以避免因不同地区实施不同的夏令政策而导致的问题[^1]。 对于 MySQL 数据库而言,可以在连接串中加入参数 `serverTimezone=UTC` 或者其他适合业务需求的标准区名称,如下所示: ```sql jdbc:mysql://hostname:port/database?useSSL=false&serverTimezone=UTC ``` #### 方法二:更新驱动版本并启用严格模式 确保使用的 JDBC 驱动是最新的稳定版,并开启严格的 SQL 模式 (`NO_ZERO_DATE`, `NO_ZERO_IN_DATE`) 和禁用宽松日期解析功能(`ALLOW_INVALID_DATES`). 这样做有助于防止潜在的数据不一致性和非法输入引起的错误。 另外,还可以考虑增加额外的参数来控制如何处理不确定的有效性范围内的日期和间值,比如 `failOverReadOnly=true` 和 `zeroDateTimeBehavior=convertToNull`. #### 方法三:自定义 Java 类加载器行为 如果上述两种方式仍未能解决问题,则可能需要更深入地介入到应用程序层面来进行调试与修复工作。一种可行的办法是在启动 ETL 流程之前临改变 JVM 的全局区环境变量;另一种则是编写一段简单的 Java 代码片段作为插件集成至 Pentaho Data Integration (PDI),用于拦截原始的结果集对象并对其中涉及间类型的列执行预处理操作——即手动修正那些不符合预期格式或超出合理界限的间戳记录。 ```java import java.sql.ResultSet; import java.sql.Timestamp; public class CustomTimestampHandler { public static Timestamp safeGetTimestamp(ResultSet rs, int columnIndex) throws SQLException { try { return rs.getTimestamp(columnIndex); } catch (SQLException e) { // Handle exception here... System.err.println("Error occurred while getting timestamp."); throw new RuntimeException(e.getMessage(), e); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值