2010-12-29 5 views
1

SQL Server 2008 데이터베이스에 DATETIME 인 열이있는 테이블이 있습니다. 삽입되는 날짜는 삽입시 NOW를 사용하는 것이 허용 될 수 있다는 점에서 타임 스탬프가 아닙니다. 삽입 전에 약간의 날짜가 생성되며이 값을 유지하려고합니다.SQL Server 2008 Datetime 열 JDBC 삽입 문제

Datetimes는 yyyy-mm-dd hh:mm:ss.[fff...] 형식의 문자열로 직렬화 된 다음 삽입되기 전에 JDBC Timestamp 객체로 변환됩니다.

내가 SQL 서버로 실행 해요 문제는 그 다음에 삽입되기 전에 타임 스탬프 값을 변환하고 있다는 점이다

이 함께 불평 : 난 그냥 변환없이 DATETIME 컬럼에 삽입 할 수있는 방법

com.microsoft.sqlserver.jdbc.SQLServerException: 
Cannot insert an explicit value into a timestamp column. 
Use INSERT with a column list to exclude the timestamp column, 
or insert a DEFAULT into the timestamp column. 

을 ?

감사합니다.

+1

테이블에 타임 스탬프 유형의 열이없는 것이 확실합니까? SQL Server 오류 메시지처럼 보이지만 Java가 아닌 타임 스탬프를 사용하십시오. - 우리에게 스키마 – Mark

+0

100 %를 보여주십시오. 질문에 이미 대답했습니다. setString은 setTimestamp가 아니라 원하는 것입니다. 나는 각 JDBC 드라이버가 datetimes를 다르게 처리한다고 생각한다. – Max

답변

4

SQL Server TIMESTAMP 데이터 형식은 날짜 형식 데이터 형식이 아닙니다. 이는 데이터 일관성을 유지하는 데 사용되는 서버 생성 값입니다. datetime 데이터를 저장하는 경우, TIMESTAMP 데이터 유형을 피하십시오.

그래서 JDBC Timestamp 객체로 변환하지 마십시오. 데이터는 문자열 값으로 삽입 할 수 있습니다. 지정한 형식은 괜찮지 만 fff...은 SQL Server DATETIME 데이터 형식의 경우 3 자리 이하 여야하며 3 자리 이하 여야합니다.

+0

그래서 timestamp 변환 (setTimestamp가 MySQL DATETIME 형식과 호환되어 혼란 스럽기 때문에)을 원하지 않기 때문에 혼란 스러웠습니다. 대신 setString()이 작동합니다. 감사! – Max

+1

예. SQL Server TIMESTAMP는 혼란 스럽습니다. 좋은 소식은 더 이상 사용되지 않습니다. ROWVERSION 키워드로 대체되므로 혼동을 줄일 수 있습니다. – bobs

+0

내가 가장 혼란 스러웠던 점은 jdbc에서 날짜 시간 지원이 부족하다는 것입니다. 날짜, 시간 또는 시간 소인이 있지만 날짜 시간은 아닙니다. setString은 Datetime을 설정하는 분명한 방법이 아닙니다. – Max

0

타임 스탬프가 여기에 SQL Server 온라인 설명서에서 견적의로 열이 정의 된 경우 :

SQL 서버 타임 스탬프 데이터 형식은 시간 또는 날짜와는 아무 상관이 없습니다. SQL 서버 타임 스탬프는 에서 데이터베이스가 변경된 의 상대 시퀀스를 나타내는 이진 숫자 입니다. 타임 스탬프 데이터 형식 은 원래 SQL Server 복구 알고리즘을 지원하도록 구현되었습니다. 타임 스탬프 값 은 행이 수정 때마다 변경되기 때문에

그것은 더 상태, 키를 특히 차 키에 타임 스탬프를 열을 사용하지 마십시오.

+1

나는 그것이 타임 스탬프로 정의 된 것이 아니라 datetime이라고 정의했다. – Max