相关疑难解决方法(0)

在将Java Date写入SQL TIMESTAMP列之前,JDBC是否将日期从JVM时区转换为数据库会话时区?

在将Java Date写入SQL TIMESTAMP列之前,JDBC是否将日期从Java虚拟机时区转换为数据库会话的日期?

例如,假设Java虚拟机时区为UTC且数据库会话时区为UTC-5.如果Java程序试图2000-01-01 00:00:00通过传递它来存储PreparedStatement#setTimestamp(int, Timestamp),根据JDBC标准,数据库是存储TIMESTAMP '2000-01-01 00:00:00'还是TIMESTAMP '1999-12-31 19:00:00'

java sql timezone timestamp jdbc

26
推荐指数
2
解决办法
2万
查看次数

oracle jdbc中的PreparedStatement和setTimestamp

我在where子句中使用带有时间戳的PreparedStatement:

PreparedStatement s=c.prepareStatement("select value,utctimestamp from t where utctimestamp>=? and utctimestamp<?"); 
s.setTimestamp(1, new Timestamp(1273017600000L));   //2010-05-05 00:00 GMT
s.setTimestamp(2, new Timestamp(1273104000000L));   //2010-05-06 00:00 GMT
ResultSet rs = s.executeQuery();
if(rs.next()) System.out.println(rs.getInt("value"));
Run Code Online (Sandbox Code Playgroud)

当我在客户端计算机上有不同的时区时,我得到的结果是不同的.这是Oracle jdbc中的错误吗?还是纠正行为?

Oracle数据库版本是10.2,我已经尝试使用oracle jdbc瘦驱动程序版本10.2和11.1.

参数是Timestamp,我预计在途中不会进行任何时间转换.数据库列类型是DATE,但我也使用TIMESTAMP列类型检查它,结果相同.

有没有办法达到正确的结果?我无法将整个应用程序中的默认时区更改为UTC.

谢谢你的帮助

java oracle timestamp jdbc prepared-statement

19
推荐指数
1
解决办法
3万
查看次数

JDBC 插入 now() 与服务器时间戳不同

对于这个 PostgreSQL 测试表:

CREATE TABLE public.test (
  id BIGSERIAL,
  "datetime" TIMESTAMP WITHOUT TIME ZONE DEFAULT now(),
  value INTEGER,
  CONSTRAINT test_pkey PRIMARY KEY(id)
) 
Run Code Online (Sandbox Code Playgroud)

我正在使用这个 SQL 插入:

INSERT INTO it.test (value) VALUES (1);
Run Code Online (Sandbox Code Playgroud)

当我从 EMS 或 PgAdmin 等远程客户端执行 INSERT 时没有问题。字段 datetime 完全填充了服务器时间戳,但是当我使用 Postgres/JDBC 驱动程序 (postgresql-9.2-1002.jdbc4.jar) 从 Java 程序执行 INSERT 时,字段 datetime 填充了与服务器不同的时间戳。

我读到 JVM 使用本地 PC 时区。有什么办法可以避免这种情况吗?

如果我将数据类型从时间戳更改为时间戳z,java会用服务器时间戳填充该字段,但我想在不更改数据类型的情况下解决它,因为该表被其他程序和报告使用。

java postgresql timezone timestamp jdbc

4
推荐指数
1
解决办法
2163
查看次数

标签 统计

java ×3

jdbc ×3

timestamp ×3

timezone ×2

oracle ×1

postgresql ×1

prepared-statement ×1

sql ×1