SQL Server的timestamp映射到Java的java.sql.Timestamp出现的问题

org.teasoft.bee.osql.BeeSQLException: 不支持从 timestamp 到 TIMESTAMP 的转换。
    at org.teasoft.honey.osql.core.ExceptionHelper.convert(ExceptionHelper.java:25)
    at org.teasoft.honey.osql.core.SqlLib.selectSomeField(SqlLib.java:194)
    at org.teasoft.honey.osql.core.SqlLib.select(SqlLib.java:69)
    at org.teasoft.honey.osql.core.ObjSQL.select(ObjSQL.java:85)
    at org.teasoft.honey.osql.core.ObjSQLRich.selectOne(ObjSQLRich.java:230)
    at org.teasoft.exam.bee.osql.UpdateSetExam.test(UpdateSetExam.java:65)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.teasoft.exam.comm.TestHelper.runTest(TestHelper.java:32)
    at org.teasoft.exam.bee.test.TestNormal.runTest(TestNormal.java:183)
    at org.teasoft.exam.bee.test.TestNormal.test(TestNormal.java:121)
    at org.teasoft.exam.MainDbTest.test(MainDbTest.java:90)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:542)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:770)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:464)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 不支持从 timestamp 到 TIMESTAMP 的转换。
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170)
    at com.microsoft.sqlserver.jdbc.DataTypes.throwConversionError(DataTypes.java:946)
    at com.microsoft.sqlserver.jdbc.ServerDTVImpl.getValue(dtv.java:1952)
    at com.microsoft.sqlserver.jdbc.DTV.getValue(dtv.java:175)
    at com.microsoft.sqlserver.jdbc.Column.getValue(Column.java:113)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:1982)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:1967)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getTimestamp(SQLServerResultSet.java:2368)
    at org.teasoft.honey.osql.core.HoneyUtil.getResultObjectByIndex(HoneyUtil.java:1275)
    at org.teasoft.honey.osql.core.SqlLib._getObjectByindex(SqlLib.java:1423)
    at org.teasoft.honey.osql.core.SqlLib.selectSomeField(SqlLib.java:164)
    
    
    SQL Server“timestamp”数据类型映射到java“byte”数据类型。

 obj = rs.getObject(i + 1); //Sql Server  :  (byte[]) [0, 0, 0, 0, 0, 0, 7, -41]

在SQL Server里,对应java.sql.Timestamp的是:

datetime,smalldatetime,datetime2

使用Bee的Ddl.java可以自动生成建表语句,省掉麻烦.

public class LeafAlloc implements Serializable {

	private Long id;
	private String bizTag;
	private Long maxId;
	private Integer step;
	private String description;
	private Timestamp updateTime;
	private Integer version;

//... get,set
}

就一句话, 即可根据javabean结构生成表.

Ddl.createTable(new LeafAlloc(), true);

生成表后打印的日志:

CREATE TABLE leaf_alloc (
id  bigint PRIMARY KEY NOT NULL,  
biz_tag  nvarchar(255) DEFAULT NULL,  
max_id  int DEFAULT NULL,  
step  int DEFAULT NULL,  
description  nvarchar(255) DEFAULT NULL,  
update_time  datetime DEFAULT NULL,  
version  int DEFAULT NULL  
 )

Bee,互联网新时代的Java ORM框架,更快、更简单、更自动,开发速度快,运行快,更智能!

https://github.com/automvc/bee

你可能感兴趣的:(DB,ORM,问题,java,SQL,Server,timestamp)