Java - oracle 日期类型字段的操作

本文介绍在Java中操作Oracle数据库日期字段的方法,包括使用java.sql.Date、java.sql.Timestamp及Oracle内置函数to_date处理日期数据。

在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: 年中的第几个星期

插入不是问题,取出时sql.date是看不到时分秒的

看过Java API知道,java.sql.Date是包括时分秒的,只不过Oracle JDBC不支持java.sql.Date类型插入时分秒,让大家误以为java.sql.Date没有时分秒。

 

=======以上方法只是参考并无使用价值

java程序内可以输入的字符串为“YYYY-MM-DD”,而oracle 内存储是以“DD-MM-YYYY”.

所以在存入数据库之前,在java程序内做好格式转换。即:“DD-MM-YYYY”.

在程序实现中,输入的是字符串,所以要将字符串转化成日期类型;然后写方法将日期与oracle日期一致。

 

{

  String date="1989-9-9";
  java.sql.Date stu_birth_date;
  stu_birth_date=java.sql.Date.valueOf(date);
  String  ddmmyyyy=null;
  String[] tmp=date.split("-");
   for(int ttt=tmp.length-1;ttt>=0;ttt--)
   ddmmyyyy=tmp[tmp.length-1]+"-"+tmp[tmp.length-2]+"-"+tmp[0];
  System.out.println(ddmmyyyy);

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<think>我们正在讨论如何在Oracle数据库的表中添加日期类型字段。 根据之前的对话,用户已经了解了添加字段的基本语法,现在特别询问如何添加日期类型字段。 引用[2]和[4]提供了相关线索:引用[2]展示了创建表时包含日期字段的示例,引用[4]展示了插入日期数据时使用to_date函数转换。 但用户当前问题聚焦于“添加日期类型字段”,而非创建表或插入数据。 因此,我们将结合之前回答的添加字段的基本语法,并特别指定数据类型为DATE。 步骤: 1. 使用ALTER TABLE语句添加字段,指定数据类型为DATE。 2. 可选:可以为该字段添加约束(例如NOT NULL)或默认值(例如DEFAULT SYSDATE)。 示例: 添加一个简单的日期字段: ALTER TABLE employees ADD (birth_date DATE); 添加一个非空且有默认值的日期字段(注意:对于现有表添加非空字段,必须指定默认值,否则会报错): ALTER TABLE employees ADD (created_date DATE DEFAULT SYSDATE NOT NULL); 注意:在添加字段时,如果指定了默认值,那么表中已有记录的这个字段将被设置为默认值。对于新插入的记录,如果不指定该字段的值,则自动使用默认值。 同时,引用[3]提到在Java中处理日期字符串存入Oracle日期字段的方法,但我们当前的问题主要是添加字段,所以仅作为扩展参考。 根据引用[4]可知,插入日期数据时通常使用to_date函数,但添加字段本身不需要这个函数。 因此,回答重点放在添加日期字段的SQL语句上。 同时,生成相关问题。 </think>### 如何在Oracle数据库中添加日期类型字段Oracle中为表添加日期类型字段需使用 `ALTER TABLE...ADD` 语句,核心语法如下: ```sql ALTER TABLE 表名 ADD ( 字段DATE [DEFAULT 默认值] [NOT NULL] ); ``` #### 操作步骤详解 1. **基本日期字段添加** ```sql -- 添加基础日期字段(允许NULL) ALTER TABLE employees ADD hire_date DATE; ``` 2. **带默认值的日期字段** ```sql -- 添加默认值为当前系统时间的字段 ALTER TABLE employees ADD created_time DATE DEFAULT SYSDATE; ``` 3. **非空日期字段** ```sql -- 添加非空日期字段(必须同时指定DEFAULT) ALTER TABLE employees ADD review_date DATE DEFAULT SYSDATE NOT NULL; ``` #### 关键注意事项 1. **默认值规则**: - `DEFAULT` 值仅对新插入记录生效 - 已有记录的日期字段默认为 `NULL`(除非显式更新) - 常用默认值函数: ```sql SYSDATE -- 当前系统时间 TRUNC(SYSDATE) -- 今天零点 SYSDATE - 7 -- 7天前 ``` 2. **数据插入技巧**: 插入时需用 `TO_DATE()` 转换字符串(引用[4]): ```sql INSERT INTO employees (hire_date) VALUES (TO_DATE('2023-08-15', 'YYYY-MM-DD')); ``` 3. **字段验证方法**: ```sql SELECT column_name, data_type, data_default FROM user_tab_columns WHERE table_name = 'EMPLOYEES' AND column_name = 'HIRE_DATE'; ``` 输出示例: ``` COLUMN_NAME | DATA_TYPE | DATA_DEFAULT -------------------------------------- HIRE_DATE | DATE | (null) ``` > 💡 **设计建议**:业务中需要频繁处理周/月汇总时(引用[1]),优先考虑添加日期字段而非字符串类型字段,可显著简化日期计算查询[^1]。
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值