LocalDateTime 和 SQL Server JDBC 4.2 驱动程序

2023-11-23

我正在尝试使用新的java.time具有最新版本的 Sql Server JDBC 驱动程序的类。据我所知,它应该只适用于方法:PreparedStatement.setObject() and ResultSet.getObject().

所以我创建了示例代码,但无法使其与结果集一起使用。我不知道我在这里做错了什么。

Connection connection = DriverManager.getConnection(connectionString);
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM myTable WHERE ? BETWEEN date_from AND date_to");
preparedStatement.setObject(1, LocalDateTime.now());   // That works

ResultSet resultSet = preparedStatement.executeQuery();
if (resultSet.next()) {
    Object o = resultSet.getObject("date_from"); 
    o.getClass() returns java.sql.Timestamp

    LocalDateTime dateTime = resultSet.getObject("date_from", LocalDateTime.class);
}

这会引发异常:

com.microsoft.sqlserver.jdbc.SQLServerException:不支持到类 java.time.LocalDateTime 的转换。

驱动程序版本:mssql-jdbc-6.5.4.jre8-preview.jar

SQL Server 版本:2016


https://learn.microsoft.com/en-us/sql/connect/jdbc/jdbc-4-2-compliance-for-the-jdbc-driver?view=sql-server-2017

如何解释底部表格中的这句话:

Java 8 中的新 Java 类: 本地日期/本地时间/本地日期时间, 偏移时间/偏移日期时间

新的 JDBC 类型: TIME_WITH_TIMEZONE, TIMESTAMP_WITH_TIMEZONE, REF_CURSOR

REF_CURSOR is not supported in SQL Server. Driver throws a SQLFeatureNotSupportedException exception if this type is used. The driver supports all other new Java and JDBC type mappings as specified in the JDBC 4.2 specification.


我不知道我在这里做错了什么。

你没有做错任何事。您之前遇到过 Microsoft SQL Server 的 JDBC 驱动程序的缺陷版本7.1.0, 讨论了here.

如果您使用的是 mssql-jdbc 版本 7.1.0 或更高版本,那么您可以使用getObject(x, LocalDateTime.class)正如预期的那样。

对于 7.1.0 之前的 mssql-jdbc 版本,正如其他人所建议的那样,您需要检索Timestamp并将其转换为LocalDateTime。但是,请注意,简单的解决方案......

LocalDateTime dateTime = resultSet.getTimestamp("date_from").toLocalDateTime()

...如果 JVM 的默认时区遵守夏令时(又称“夏令时”),则会损坏某些日期/时间值。例如,

// time zone with Daylight Time
TimeZone.setDefault(TimeZone.getTimeZone("America/Edmonton"));

// test environment
Statement st = conn.createStatement();
st.execute("CREATE TABLE #tmp (id INT PRIMARY KEY, dt2 DATETIME2)");
st.execute("INSERT INTO #tmp (id, dt2) VALUES (1, '2018-03-11 02:00:00')");
ResultSet rs = st.executeQuery("SELECT dt2 FROM #tmp WHERE id=1");
rs.next();

// test code
LocalDateTime x = rs.getTimestamp("dt2").toLocalDateTime();  // bad

System.out.println(x.toString());

将打印“2018-03-11T03:00”。请注意,时间是“03:00”,而不是“02:00”。

相反,您需要检索Timestamp作为 UTC,然后将其转换为LocalDateTime对于 UTC,从而删除时区部分

// time zone with Daylight Time
TimeZone.setDefault(TimeZone.getTimeZone("America/Edmonton"));

// test environment
Statement st = conn.createStatement();
st.execute("CREATE TABLE #tmp (id INT PRIMARY KEY, dt2 DATETIME2)");
st.execute("INSERT INTO #tmp (id, dt2) VALUES (1, '2018-03-11 02:00:00')");
ResultSet rs = st.executeQuery("SELECT dt2 FROM #tmp WHERE id=1");
rs.next();

// test code
Timestamp ts = getTimestamp("dt2", Calendar.getInstance(TimeZone.getTimeZone("UTC")));
LocalDateTime x = LocalDateTime.ofInstant(ts.toInstant(), ZoneId.of("UTC"));  // good

System.out.println(x.toString());

打印“2018-03-11T02:00”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LocalDateTime 和 SQL Server JDBC 4.2 驱动程序 的相关文章

  • 为什么在 10 个 Java 线程中递增一个数字不会得到 10 的值?

    我不明白 a 的值为0 为什么 a 不是10 那段代码的运行过程是怎样的 是否需要从Java内存模型来分析 这是我的测试代码 package com study concurrent demo import lombok extern sl
  • 通过Zuul上传大文件

    我在通过 zuul 上传大文件时遇到问题 我正在使用 apache commons 文件上传 https commons apache org proper commons fileupload https commons apache o
  • 有人用过 ServiceLoader 和 Guice 一起使用吗?

    我一直想通过我们的应用程序 构建系统进行更大规模的尝试 但更高的优先级不断将其推到次要地位 这似乎是加载 Guice 模块的好方法 并且避免了关于 硬编码配置 的常见抱怨 单个配置属性很少会自行更改 但您几乎总是会有一组配置文件 通常用于不
  • 未装饰窗户的 Windows Snap 功能?

    有谁知道如何允许未装饰的窗户使用此功能 唯一的选择就是重新实施它 有任何想法吗 谢谢 可停靠可能是唯一的JToolBar http docs oracle com javase tutorial uiswing components too
  • 使用 OkHttp 下载损坏的文件

    我编写的下载文件的方法总是会产生损坏的文件 public static String okDownloadToFileSync final String link final String fileName final boolean te
  • Java AES 256 加密

    我有下面的 java 代码来加密使用 64 个字符密钥的字符串 我的问题是这会是 AES 256 加密吗 String keyString C0BAE23DF8B51807B3E17D21925FADF273A70181E1D81B8EDE
  • Mockito 和 Hamcrest:如何验证 Collection 参数的调用?

    我遇到了 Mockito 和 Hamcrest 的泛型问题 请假设以下界面 public interface Service void perform Collection
  • 避免数据集中出现重复名称

    我正在从表中获取数据并绑定到标签并在 gridview 中下拉 但我想从表中过滤重复的名称并将相应的日期分配给 DDL 如何做到这一点 或者还有其他选择吗 private DataSet get string sql select Id N
  • IntelliJ Idea:将简单的 Java servlet(无 JSP)部署到 Tomcat 7

    我尝试按照教程进行操作here http wiki jetbrains net intellij Creating a simple Web application and deploying it to Tomcat部署 servlet
  • UseCompressedOops JVM 标志有什么作用以及何时应该使用它?

    HotSpot JVM 标志是什么 XX UseCompressedOops我应该做什么以及什么时候使用它 在 64 位 Java 实例上使用它 与不使用它 时 我会看到什么样的性能和内存使用差异 去年大多数 HotSpot JVM 都默认
  • 数据库中的持久日期不等于检索日期

    我有一个具有 Date 属性的简单实体类 此属性对应于 MySQL 日期时间列 Entity public class Entity Column name start date Temporal TemporalType TIMESTAM
  • 类更改(例如字段添加或删除)是否保持 Serialized 的向后兼容性?

    我有一个关于 Java 序列化的问题 在这种情况下 您可能需要修改可序列化类并保持向后兼容性 我有丰富的 C 经验 所以请允许我将 Java 与 NET 进行比较 在我的Java场景中 我需要使用Java的运行时序列化机制序列化一个对象 并
  • Android - 存储对ApplicationContext的引用

    我有一个静态 Preferences 类 其中包含一些应用程序首选项和类似的内容 可以在那里存储对 ApplicationContext 的引用吗 我需要该引用 以便我可以在不继承 Activity 的类中获取缓存文件夹和类似内容 你使用的
  • Azure Java SDK:ServiceException:ForbiddenError:

    尝试了基本位置检索器代码 如下所示 String uri https management core windows net String subscriptionId XXXXXXXX 5fad XXXXXX 9dfa XXXXXX St
  • 我所有的 java 应用程序现在都会抛出 java.awt.headlessException

    所以几天前我有几个工作Java应用程序使用Swing图书馆 JFrame尤其 他们都工作得很好 现在他们都抛出了这个异常 java awt headlessexception 我不知道是什么改变了也许我的Java版本不小心更新了 谢谢你尽你
  • 在 Java 中通过 D-Bus MPRIS 访问 Clementine 实例

    我使用 Clementine 作为音乐播放器 它可以通过 D Bus 命令进行控制 在命令行上 使用 qdbus 我可以 Start Stop 暂停播放器 强制它跳过播放列表中的歌曲 检查播放列表的长度 检查播放列表中当前播放的曲目及其元数
  • 使用 Apache 允许 Glassfish 和 PHP 在同一服务器中协同工作

    是否可以建立从 Java 到 php 文件的桥梁 我有一个用 Java 编写的应用程序 我需要执行http piwik org http piwik org 这是用 PHP 编写的 在服务器中 我正在运行 PHP 但无法从浏览器访问 php
  • 检测到 JVM 正在关闭

    我有一个使用 addShutdownHook 处理 Ctrl C 的 Swing 应用程序 它工作正常 直到我的关闭任务之一调用一个在正常情况下更改 JLabel 文本的函数 此时它挂起 我认为问题是 Swing EDT 已终止或正在等待某
  • 在会话即将到期之前调用方法

    我的网络应用程序有登录的用户 有一个超时 在会话过期之前 我想执行一个方法来清理一些锁 我已经实现了sessionListener但一旦我到达public void sessionDestroyed HttpSessionEvent eve
  • 关闭扫描仪是否会影响性能

    我正在解决一个竞争问题 在问题中 我正在使用扫描仪获取用户输入 这是 2 个代码段 一个关闭扫描器 一个不关闭扫描器 关闭扫描仪 import java util Scanner public class JImSelection publ

随机推荐

  • 如何在log4net中为多行日志条目添加缩进?

    我知道这个问题我同意这个答案 但是我可以使用 log4net 执行以下操作吗 而不是 2013 04 09 12 54 47 093 INFO Main Line 1 Line 1 Line 1 Line 2 Line 2 Line 2 L
  • 缩放后的 QPixmap 看起来很糟糕

    我有以下小部件 pixmap QtGui QPixmap r pics cdaudio png scaled 100 100 图像从 256x256 缩小 它看起来相当不稳定 如何在 Qt 内平滑地扩展它 Use the transform
  • 当 mysql_query 返回 false 时

    除了编写错误的查询并且没有访问表的权限之外 当mysql query返回假 还有其他案例吗 请参阅参考指南 对于 SELECT SHOW DESCRIBE EXPLAIN 等返回的语句 结果集 mysql query 成功时返回资源 否则返
  • 我的 App Engine 应用程序不会自动创建默认存储桶

    我的应用程序引擎应用程序不会自动创建默认存储桶我不明白这是为什么 我的其他应用程序工作正常 但是当我在新应用程序中运行相同的代码时 我正在处理它 但它不会创建 Google 云存储桶 有人有主意吗 已弃用的方法 转到您的 App Engin
  • 将整数列表传递给存储过程

    这是我的存储过程 ALTER PROCEDURE dbo Dan numbers varchar 10 AS BEGIN SET NOCOUNT ON select numbers numbers END 在SSMS中 我可以像这样成功执行
  • 单击浏览器后退按钮时如何调用事件

    单击浏览器后退按钮时如何调用 jquery 事件 我在 asp net mvc 中使用单页应用程序 我想在用户按下浏览器的后退按钮时显示一个确认框以离开屏幕 我如何在浏览器后退按钮上调用 jquery 函数 请帮忙 我已经搜索并找到了推送状
  • “ProductList”对象没有属性“object_list”

    In my ProductList类 当我尝试打电话时get context data在另一种方法中 我收到错误 ProductList object has no attribute object list def get context
  • Google Analytics 有没有办法像 Mixpanel 一样跟踪多个事件参数?

    Given trackEvent category action opt label opt value opt noninteraction 我尝试使用 opt label 但它似乎只是一个字符串 并且不接受像 Mixpanel 那样的不
  • Python:排序函数在存在 nan 时中断

    sorted 2 float nan 1 回报 2 nan 1 至少在 Activestate Python 3 1 实现上是这样 我明白nan是一个奇怪的对象 所以如果它出现在排序结果中的随机位置我不会感到惊讶 但它也搞乱了容器中非 na
  • 转义大括号位于车把中的表达式旁边

    无法理解如何转义位于表达式旁边的 或 符号Handbars Java 模板引擎 我正在使用车把模板生成纯文本 因此我无法按照建议使用大括号的 HTML ASCII 代码there 我需要这样的表达 variable name 待解决 var
  • 使用 ACTION_IMAGE_CAPTURE 以较低分辨率打开 Android 相机

    我正在使用这样的意图打开 Android 相机 Intent cameraIntent new Intent android provider MediaStore ACTION IMAGE CAPTURE cameraIntent put
  • GWT 2.7 + GAE 应用程序在部署时查找代码服务器

    为什么 appengine 尝试使用超级开发模式 每次我将 GWT 应用程序部署到 appengine 并尝试访问它时 我都会看到白色的加载屏幕 然后大约 20 30 秒后我会收到以下消息 我使用 Maven 与gwt maven 插件 a
  • hibernate如何从现有数据库视图中检索数据?

    我是冬眠新手 我的问题是我有一个 Oracle 数据库 我在数据库中有一个视图 现在我想使用 hibernate 来检索该视图中的数据 有没有可能的解决方案 下面的代码片段可以解决您的问题 该代码片段是从教程中提取的 将 Hibernate
  • 为什么 Object.create(null) 的 __proto__ 未定义?

    在阅读 Javascript 原型时 我遇到了这种我无法解释的行为 我正在 chrome 的控制台 V8 中对此进行测试 var fruit taste good var banana Object create fruit console
  • 如何避免 Java 游戏中的垃圾收集延迟? (最佳实践)[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在为 Android 平台调整 Java 交互游戏的性能 有时 垃圾收集的绘图和交互会出现问题 通常它不到十分之一秒 但有时在非常慢的设备上可能会长达 200 毫秒 我正在使
  • 检查两个 Python 正则表达式模式是否等效

    我想写一个正则表达式re VERBOSE模式 但我不相信我会毫无错误地添加详细部分 我记得 理论上 两个正则表达式的等价性 至少没有反向引用 可以通过生成它们的自动机并尝试找到图双射来找到 但我看不到用于比较正则表达式的实例方法 有没有办法
  • 无法使用滚动条使 DIV 宽度为 100%

    我有一个带有 DIV 和 TABLE 的页面 DIV 是我的标题 即使显示水平滚动条 我也希望它的宽度为 100 由于某种原因 它只占用 100 的可见窗口 我的 HTML 代码是 div style background color ye
  • WCF、Web 服务或 ADO.NET 数据服务:我应该使用什么?

    对于一个项目 我必须在 Web 服务器上托管的数据库与互联网上的多个客户端之间实现通信 在阅读了一些内容并观看了一些有关可能的 微软 技术的介绍性视频后 我发现我似乎 至少 有三个选择 1 Windows 通信基础 WCF 2 ASP NE
  • 目标框架下拉列表为空

    我安装了 VS NET 2010 Premium 但在尝试针对现有 NET 框架时似乎出现问题 当我打开 Web 应用程序项目的属性时 我得到的唯一选项是安装框架 如果我打开任何其他项目类型的属性 我会得到完整列表 到目前为止 我已执行以下
  • LocalDateTime 和 SQL Server JDBC 4.2 驱动程序

    我正在尝试使用新的java time具有最新版本的 Sql Server JDBC 驱动程序的类 据我所知 它应该只适用于方法 PreparedStatement setObject and ResultSet getObject 所以我创