Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1620507
  • 博文数量: 201
  • 博客积分: 2812
  • 博客等级: 少校
  • 技术积分: 3029
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-18 18:28
个人简介

从事数据库工作多年,目前看好分布式NeSQL/HTAP数据库在企业客户市场的发展。未来的主要方向是——致力于 NewSQL/HTAP 数据库的推广普及。

文章存档

2016年(1)

2015年(8)

2014年(23)

2013年(50)

2012年(32)

2011年(87)

分类: Sybase

2013-12-05 12:16:53

      近日遇到一个群友提的问题 ”通过JDBC中获取timestamp时,毫秒中后面的0会省略” ,他期望仍旧保留尾部的0. 本文首先模拟一下问题,然后向大家介绍一种解决方法,这种解决方法不需要修改java应用代码。

1. 再现问题

--创建测试表
create table test1(name char(8),chg_idf timestamp default TIMESTAMP)

--插入测试数据
insert into test1(name) values('wang')
commit

--使用采用jConnect驱动的java客户端或java程序访问测试表
select * from test1
下面是查询显示的结果:
abc      2013-12-05 11:17:16.55      --我们看到timestamp数据显示的毫秒部分是55,而实际应为550


2. 解决方法
    通过尝试,发现通过调整数据库选项 ”RETURN_DATE_TIME_AS_STRING”的设置可以解决问题。不过,这个选项只能设置为temporary的,即只能是会话级设置有效的,这样就不能在数据库级或用户级设置。
    为了解决这个问题,有两个方法:一个是在前端java程序中加上设置该选项的语句,这种方法需要修改应用代码;另一个是修改一个系统存储过程(dbo.sp_tsql_environment),这个存储过程在TDS客户端登陆IQ建立连接时IQ Server会自动执行它。下面是修改后的存储过程代码:
--alt_sp_tsql_env.sql
alter procedure dbo.sp_tsql_environment()
begin
  if db_property('IQStore') = 'Off' then
    -- ASA datastore
    set temporary option close_on_endtrans = 'OFF'
  end if;
  set temporary option ansinull = 'OFF';
  set temporary option tsql_variables = 'ON';
  set temporary option ansi_blanks = 'ON';
  set temporary option chained = 'OFF';
  set temporary option quoted_identifier = 'OFF';
  set temporary option allow_nulls_by_default = 'OFF';
  set temporary option on_tsql_error = 'CONTINUE';
  set temporary option isolation_level = '1';
  set temporary option date_format = 'YYYY-MM-DD';
  set temporary option timestamp_format = 'YYYY-MM-DD HH:NN:SS.SSS';
  set temporary option time_format = 'HH:NN:SS.SSS';
  set temporary option date_order = 'MDY';
  set temporary option escape_character = 'OFF';
  --timestamp config
  set temporary option RETURN_DATE_TIME_AS_STRING = 'ON'
end

注意上面存储过程中的红色部分是在原有代码上增加的。执行上面的脚本,重新登陆IQ,再次执行查询问题解决。
阅读(5286) | 评论(2) | 转发(1) |
给主人留下些什么吧!~~

lion_sybiq_1272013-12-09 20:34:05

有可能发生这个问题,能不能具体说说那些查询会有问题