天天看點

java向ORACLE插入時間

引自:http://blog.sina.com.cn/s/blog_5671e70e0100fppm.html

public class Test{

       public static void main (String args []){              

                java.util.Date a = new java.util.Date();

                System.out.println(a);

                java.sql.Date b = new java.sql.Date(a.getTime());

                System.out.println(b);

                java.sql.Time c = new java.sql.Time(a.getTime());

                System.out.println(c);

                java.sql.Timestamp d=new java.sql.Timestamp(a.getTime());

                System.out.println(d);

        }

}

Mon Apr 03 18:00:34 CST 2006

2006-04-03

18:00:34

2006-04-03 18:00:34.388

1.         oracle預設的系統時間就是sysdate函數,儲存的資料形如25-3-200510:55:33

2.         java 中取時間的對象是java.util.Date。

3.         oracle中對應的時間對象是java.util.Date,java.sql.Time,java.sql.Timestamp、它們都是是java.util.Date的子類。

4.         oracle中與date操作關系最大的就是兩個轉換函數:to_date(),to_char()。to_date()一般用于寫入日期到資料庫時用到的函數。to_char()一般用于從資料庫讀入日

期時用到的函數。

DATE、TIME 和 TIMESTAMP:

SQL 定義了三種與時間有關的資料類型:DATE 由日、月和年組成。TIME 由小時、分鐘和秒組成。 TIMESTAMP 将 DATE 和 TIME 結合起來,并添加了納秒域。

标準 Java 類 java.util.Date 可提供日期和時間資訊。但由于該類包含 DATE 和 TIME 資訊而沒有 TIMESTAMP 所需的納秒,是以并不與上述三種 SQL 類型完全相配。

是以我們定義了 java.util.Date 的三種子類。它們是:

1.       有關 SQL DATE 資訊的 java.sql.Date

2.       有關 SQL TIME 資訊的 java.sql.Time

3.       有關 SQL TIMESTAMP 資訊的 java.sql.Timestamp

對于 java.sql.Time,java.util.Time 基本類的小時、分鐘、秒和毫秒域被設定為零。 對于 java.sql.Date,java.util.Date 基本類的年、月和日域被分别設定為 1970 年 1

月 1 日。這是在 Java 新紀元中的“零”日期。java.sql.date中的日期可以和标準的SQL語句中含有日期的字段進行比較.java.sql.Timestamp 類通過添加納秒域來擴充

java.util.Date。

oracle中兩個轉換函數:

1.       to_date() 作用将字元類型按一定格式轉化為日期類型:

具體用法:to_date(''2004-11-27'',''yyyy-mm-dd''),前者為字元串,後者為轉換日期格式,注意,前後兩者要以一對應。如;to_date(''2004-11-27 13:34:43'', ''yyyy-mm-dd

hh24:mi:ss'') 将得到具體的時間。

2.       to_char():将日期轉按一定格式換成字元類型:

具體用法:to_char(sysdate,''yyyy-mm-dd hh24:mi:ss'')

to_date()與24小時制表示法及mm分鐘的顯示:

在使用Oracle的to_date函數來做日期轉換時,很多Java程式員也許會直接的采用“yyyy-MM-dd HH:mm:ss”的格式作為格式進行轉換,但是在Oracle中會引起錯誤:“ORA 01810

格式代碼出現兩次”。

如:select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;

原因是SQL中不區分大小寫,MM和mm被認為是相同的格式代碼,是以Oracle的SQL采用了mi代替分鐘。 oracle預設的系統時間就是sysdate函數,儲存的資料形如2005-3-2510:55:33

,java 中取時間的對象是java.util.Date。

select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual

在java對oracle的操作中,對日期字段操作的例子:

表 book 中有name varchar2(20)//書籍名稱,buydate Date //購買日期 兩個字段。

已經建立了資料庫連接配接Connection conn;

方法一、使用java.sql.Date實作比較簡單的yyyy-mm-dd格式日期。java.sql.Date不支援時間格式。切記不要使用new java.sql.Date(int year,int month,int date),因為還要處

理時間差問題。

PreparedStatement pstmt = conn.prepareStatement("insert into book (name,buydate) values (?,?)");

java.sql.Date buydate=java.sql.Date.valueOf("2005-06-08");

pstmt.setString(1, "Java程式設計思想");

pstmt.setDate(2,buydate );

pstmt.execute();

方法二、使用java.sql.Timestamp,同上不使用new Timestamp(....)

PreparedStatement pstmt = conn.prepareStatement("insert into book (name,buydate) values (?,?)");

java.sql.Timestamp buydate=java.sql.Timestamp.valueOf("2004-06-08 05:33:99");

pstmt.setString(1, "Java程式設計思想");

pstmt.setTimestamp(2,buydate );

pstmt.execute();

方法三、使用oracle 的to_date内置函數

PreparedStatement pstmt = conn.prepareStatement("insert into book (name,buydate) values (?,to_date(?, 'yyyy-mm-dd hh24:mi:ss')");

String buydate="2004-06-08 05:33:99";

pstmt.setString(1, "Java程式設計思想");

pstmt.setString(2,buydate );

pstmt.execute();

附:oracle日期格式參數含義說明

d:一周中的星期幾

day:天的名字,使用空格填充到9個字元

dd:月中的第幾天

ddd:年中的第幾天

dy:天的簡寫名

iw: ISO标準的年中的第幾周

iyyy:ISO标準的四位年份

yyyy:四位年份

yyy,yy,y:年份的最後三位,兩位,一位

hh: 小時,按12小時計

hh24:小時,按24小時計

mi:分

ss:秒

mm:月

mon:月份的簡寫

month:月份的全名

w:該月的第幾個星期

ww:年中的第幾個星期

=====================

sql111= select * from 

logincount where logtime = to_date('2009-11-30','yyyy-MM-dd')

st = con.prepareStatement("select * from  logincount where logtime = to_date('"+ new java.sql.Date(date.getTime())+"','yyyy-MM-dd')");

繼續閱讀