2

JDBC を使用して MS SQL 2005 に日時を挿入するにはどうすればよいですか? ストアド プロシージャを使用して DB に挿入します。

ALTER proc [dbo].[sp_insertid_report]
@stream_time_gmt as datetime,
@stream_time_local as datetime,
@start_time_gmt as datetime,
@end_time_gmt as datetime,
@start_time_local as datetime,
@end_time_local as datetime,
@note_id as int,
@reported_by as varchar(100),
@date_reported as datetime,
@date_created as datetime,
@date_updated as datetime,
@stream_id as int,
@Fp_file_path as varchar(300),
@Fp_name as varchar(200), 
@Is_Allowed as varchar(2)

as

begin  
insert into id_reports(stream_time_gmt,stream_time_local,start_time_gmt,end_time_gmt,start_time_local,end_time_local,
note_id,reported_by,date_reported,date_created,date_updated,stream_id,Fp_file_path,Fp_name,Is_Allowed)
values(@stream_time_gmt,@stream_time_local,@start_time_gmt,@end_time_gmt,@start_time_local,
@end_time_local,@note_id,@reported_by,@date_reported,@date_created,@date_updated,@stream_id,@Fp_file_path,@Fp_name,@Is_Allowed)
end 

私のJDBCコードは次のとおりです。

    callableStatement = connection.prepareCall("{ call dbo.sp_insertid_report(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) }");
        callableStatement.setDate(1, new Date(cvtToGmt(new java.util.Date(modifiedTime.toMillis())).getTime()));
        callableStatement.setDate(2, new Date(modifiedTime.toMillis()));
        callableStatement.setDate(3, new Date(cvtToGmt(startTime).getTime()));
        callableStatement.setDate(4, new Date(cvtToGmt(endTime).getTime()));
        callableStatement.setDate(5, new Date(endTime.getTime()));
        callableStatement.setDate(6, new Date(endTime.getTime()));
        callableStatement.setInt(7, songID);
        callableStatement.setString(8, AudioMatcherService.hostName);
        java.util.Date date = new java.util.Date();
        callableStatement.setDate(9, new Date(date.getTime()));
        callableStatement.setDate(10, new Date(date.getTime()));
        callableStatement.setDate(11, new Date(date.getTime()));
        callableStatement.setInt(12, channel.getAssignmentID());
        callableStatement.setString(13, "no");
        callableStatement.setString(14, "no");
        callableStatement.setString(15, "Y");
        callableStatement.execute();

しかし、これはDBに時、分、秒、ミリ秒を挿入していませんか? この情報を JDBC から挿入するにはどうすればよいですか? 前もって感謝します。日付と時刻のことを理解するのは非常に難しいと思います..至る所に非常に多くのバリエーションがあります..

編集

テーブル構造は次のとおりです。

ここに画像の説明を入力

編集

メソッド cvtToGmt() はHow to convert a local date to GMT からのものです

4

2 に答える 2

4

使用する必要はありjava.sql.Timestampませんjava.sql.Date

java.util.Date「実際の」日付列専用で、時間部分が削除されます。日付と時刻を保存する必要がある場合は、を使用する必要がありますjava.sql.Timestamp

Javadoc から:

SQL DATE の定義に準拠するには、java.sql.Date インスタンスによってラップされるミリ秒値は、インスタンスが関連付けられている特定のタイム ゾーンで時、分、秒、およびミリ秒をゼロに設定することによって「正規化」する必要があります。 .

setTimestamp()そしてもちろん、代わりにsetDate()同様に使用する必要があります。

于 2013-01-22T14:50:40.727 に答える
2

EDIT2

使用callableStatement.setTimestamp()- これはタイムスタンプとして扱われます。javax.sql.Timestamp拡張java.util.Dateされるため、変換する必要はありません。

たぶん、cvtToGmt()関数は分数をカットします。

おそらく、テーブルに間違った列タイプがあり、Date.

Date列の種類: YYYY-MM-DD http://msdn.microsoft.com/en-ie/library/bb630352.aspx

Datetime列の種類: YYYY-MM-DD hh.mm.ss.nnn http://msdn.microsoft.com/en-ie/library/ms187819.aspx

于 2013-01-22T14:35:06.747 に答える