
你好:
SQL Server timestamp 数据类型与时间和日期无关。SQL Server timestamp 是二进制数字,它表明数据库中数据修改发生的相对顺序。实现 timestamp 数据类型最初是为了支持 SQL Server 恢复算法。每次修改页时,都会使用当前的 @@DBTS 值对其做一次标记,然后 @@DBTS 加1。这样做足以帮助恢复过程确定页修改的相对次序,但是 timestamp 值与时间没有任何关系。
我们知道数字类型有个“标识”属性,设置好“标识种子”、“标识递增量”,每增加一条记录时,这个字段的值就会在最近的一个标识值基础上自动增加,这样我们可以知道哪些记录是先添加的,哪些记录是后添加的,但是我们无法知道哪些记录修改过。timestamp这个类型的字段呢,每增加一条记录时,它会在最近的一个时间戳基础上自动增加,当修改某条记录时,它也会在最近的一个时间戳基础上自动增加,所以我们就知道哪些记录修改过了。
如何向SQLServer中的datatime类型字段插入日期数据2008年03月28日 星期五 17:23最近总是因日期类型而困惑,今天发现了其中的原因,拿出来总结一下:
在JAVA中如果通过JDBC访问MSSQL数据库,其实你可以这样向datatime类型字段插入日期数据:
//连接数据库就不用写了
String sql="insert into datetest values(,)";//第一个参数name字段,第二个是datetime类型birthday字段
PreparedStatement ps=conprepareStatement(sql);
//Timestamp st = new Timestamp(new Date()getTime());//创建Timestamp对象
//---------------------这句很重要
Timestamp st = new javasqlTimestamp(new javautilDate()getTime());//创建Timestamp对象
//--------------------------
pssetString(1, "xiaoxu");
pssetTimestamp(2, st);//向数据库插入数据
psexecuteUpdate();
我以前总是用pssetDate(2,date)方式,结果就是插入不进去。可能是JAVA中date类型与MSSQL数据库中datetime不兼容吧!
你也可以用另种方法向datatime类型字段插入日期数据:
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");
String date=sdfformat(new Date());
连接数据库
pssetString(2, date)//也能向datatime类型字段插入日期数据psexecuteUpdate();
在JAVA中如果用Hibernate如何映射datetime类型呢?
在写javabean时用的是javasqlTimestamp类型,但数据库里用的是Datetime类型(因为要保存时间),但我不想在数据库中用timestamp(很多数据,难改),
请问能直接把Timestamp映射成datetime类型么?
在Hibernate的映射配制文件中你可以直接类型指定成timestamp就行了!
$re = M('suply')->add($data);
// 通常情况下,出现这种错误添加的值和数据库中的字段不对应造成的,仔细核对 sl_suply 表中是否有 addtime 字段,检查表结构是否有问题
// 还有一种情况就是由于字段缓存造成的,这个概率很小,不过有时仍然会发生;解决的办法就是每次做数据 *** 作时重新 New 一个 Model 而不使用缓存,
M()->table('sl_suply')->add($data)
// 再有一种情况就是 data 数据错误造成的 ,仔细核对在 $data['addtime'] = time(); 这句话之前是否有过赋值的 *** 作,可以打印出来看一下 data 数据是否有问题;
// 最后如果实在不行,有可能就是项目其他原因造成的,这时候只能手动写原生 sql 语句了;
insert into sl_suply (addtime) values (time());
删掉这行:
Timestamp stamp = DateConventerstrWithtimeToTimestamp("2009-02-07 12:10:30");
改成
String stamp = "2009-02-07 12:10:30";
然后把:
String executeSql = "insert into TB_Tickets (TicketID,TicketName," +
"StadiumID,Price,Descn,BeginTime) values("+"seq_mpnextval"+",,,,,"
+stamp+")";
改成:
String executeSql = "insert into TB_Tickets (TicketID,TicketName,"
+ "StadiumID,Price,Descn,BeginTime) values(" + "seq_mpnextval"
+ ",,,,,to_date('" + stamp + "','yyyy-mm-dd hh24:mi:ss'))";
就可以了,试试看
按照你补充为题所说的,那你就需要使用PreparedStatement进行数据加载:
imestamp stamp = DateConventerstrWithtimeToTimestamp("2009-02-07 12:10:30");
String executeSql ="";
PreparedStatementsetTimestamp(parameterIndex,Timestamp)
是时间戳类型,参数6指的是表示秒的数字的小数点右边可以存储6位数字,最多9位。解决方法如下:
1、时间戳的概念:它是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
2、在oracle使用时间戳,一般都是为了方便计算时间差的,要知道oracle中的date类型想减是不能友好的得到时间的差值的。所以使用时间戳来得到两个时间差。
3、首先来看oracle中如何获得当前时间的时间戳,用当前时间减去计算机元年后再经过换算得到了的从1970年来到当前时间的时间戳,单位是微妙。
4、另外oracle提供了另一种便捷得到两个时间差的方式,那就是使用timestamp数据类型,它类似date类型,但是存储的时间更为精确,显示的格式:yyyy-mm-dd hh24:mi:ssff AM,其中ff是小数秒。
5、timestamp类型的时间差可读性也比上面那种好一些,可以直观看出两个时间差。
以mysql为例,有个字段是timestamp或者datatime类型。
1、可以直接在java中直接new javalangutilDate();
2、获取到一个时间类型的字符串,然后利用SimpleDateFormat中的parse方法将时间字符串解析成一个Date对象。
现在比较流行的框架都是可以直接插入Date类型的数据,只要与数据库中的映射一致即可。
如mybatis,如下:
<resultMap id="BaseResultMap" type="comtestUser" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="insert_time" property="insertTime" jdbcType="TIMESTAMP" />
</resultMap>
只要User中的属性insertTime是一个标准格式的javalangutilDate类型,然后调用mybatis的insert方法即可插入。
如果是日期字符串类型就是~
CREATE TABLE 表名
(
time datetime NOT NULL DEFAULT NOW(),
)
如果是时间戳~
CREATE TABLE 表名
(
time int NOT NULL DEFAULT CURRENT_TIMESTAMP(),
)
-----希望对你有帮助~
如果是插入的时候的话~在对应值上填写NOW()/CURRENT_TIMESTAMP() 也是可以的
以上就是关于使用JDBC插入值的时候,sqlserver数据库的timestamp类型应该怎么插入全部的内容,包括:使用JDBC插入值的时候,sqlserver数据库的timestamp类型应该怎么插入、thinkphp 给字段'addtime'添加时间戳,为什么怎么都存不了数据库,sql语句也没有'addtime'、Java往Oracle中插入timestamp类型数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)