→阿童沐

財富==支撐一個人生存多長時間的能力!

导航

数据库中插入日期-

[数据库]oracle 日期类型字段的操作


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


另一个例子:

package com.daqing.test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

import com.daqing.jdbc.JdbcUtils;

public class DateTest {

    private static Connection conn = null;
    private static PreparedStatement ps = null;
    private static ResultSet rs = null;
    
    public static void main(String[] args) throws SQLException {
        /**
         * new Date()表示获取当前时间
         */
        //create("ydqhaha", new Date(), 501.0f);
        
        Date date = read(13);
        System.out.println(date);
    }
    
    /**
     * Date型存入到数据库中
     * @param name
     * @param birthday
     * @param money
     * @throws SQLException
     */
    public static void create(String name,Date birthday,float money) throws SQLException{
        String sql = "insert into user(name,birthday,money) values(?,?,?)";
        conn = JdbcUtils.getConnection();
        ps = conn.prepareStatement(sql);
        ps.setString(1, name);
        /*
         * 因为在业务逻辑从用的都是java.util.Date包
         * java.sql.Date包是从java.util.Date包中继承的,把父类赋给子类是不行的。
         * 获取java.util.Date中的当前时间
         */
        ps.setDate(2, new java.sql.Date(birthday.getTime()));
        ps.setFloat(3, money);
        int i = ps.executeUpdate();
        System.out.println(i);
    }
    
    /**
     * 根据id查询生日,是时间字段的处理方法
     * @param i
     * @return
     * @throws SQLException
     */
    public static Date read(int i) throws SQLException{
        Date birthday = null;
        String sql = "select * from user where id=?";
        conn = JdbcUtils.getConnection();
        ps = conn.prepareStatement(sql);
        ps.setInt(1, i);
        rs = ps.executeQuery();
        while(rs.next()){
            /**
             * java.sql.Date子类的Date赋值给父类java.util.Date是可以的
             * 输出格式为:2010-08-15
             */
            birthday = rs.getDate("birthday");
            /**
             * 也可以在这里进行转换,把java.sql.Date转为java.util.Date
             * 输出格式为Sun Aug 15 00:00:00 CST 2010
             */
            //birthday = new Date(rs.getDate("birthday").getTime());
        }
        return birthday;
    }
}

 


mysql 日期查询

1.在mysql数据库中,如果我们要根据年月日,查询到我们想要的数据,那么像下面这样写就可以了。 
select * from orderding where year(orderCreateDate)=2009 and month(orderCreateDate)=03 

2.在jsp页面的编写过程中我们通常会遇到查询起始时间和查询截至时间,这个起始时间和截至时间也是对jsp页面复杂查询的一个应用。首先我们获取到的日期格式是这样的:2009-2-12或者2009-3-3或者2009-10-12,我们在组合sql语句的时候可以这样:(分了三个例子) 

  1> select * from user where birthday>'2009-2-3' and birthday<'2009-4-3'这样我们能够查到所有包括2009-2-3并且大于2009-2-3的所有的用户信息。 
  2> 如果我们是这样组合的select * from user where birthday>'2009-2-3'那么我们就会查到等于2009-2-3并且和大于2009-2-3号的所有信息。 
  3> 如果我们是这样的组合select * from user where birthday<'2009-2-3'那么我们会查询到包括2009-2-3并且小于2009-2-3的所有用户信息。 


这里可能是mysql自己的一个实现机制,不用写=号,=号也包含在我们写的sql语句中了。并且在组合这个sql语句的时候要注意''的用法,如果省去了''那么我们就会吃大亏的。还有2009-2-3这个数值的获取在jsp中通常是request.getParameter("birthday").这样的

 


 

JDBC日期详解

import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.Time;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
/** *//**
*
* @author oakertree
*
*/
public class TestJDBCDate {
  public static void main(String[] args) {
    Connection con = null;
    Statement stmt = null;
    ResultSet rs = null;
    try {
      Class.forName("com.mysql.jdbc.Driver");
//      new com.mysql.jdbc.Driver();
      con = DriverManager.getConnection("jdbc:mysql://localhost:3307/test", "root", "admini");
      stmt = con.createStatement();
      rs = stmt.executeQuery("SELECT * FROM time");
      while(rs.next()) {
        /**//*
        Date d = rs.getDate("date");
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        System.out.println(sdf.format(d));
        */
        
        /**//*
        Time t = rs.getTime("time");
        SimpleDateFormat sdf = new SimpleDateFormat("HH时mm分ss秒");
        System.out.println(sdf.format(t));
        */
        
        Date d = rs.getDate("datetime");
        Time t = rs.getTime("datetime");
        SimpleDateFormat sdfdate = new SimpleDateFormat("yyyy年MM月dd日");
        SimpleDateFormat sdftime = new SimpleDateFormat("HH时mm分ss秒");
        System.out.println(sdfdate.format(d) + sdftime.format(t));
        
        /**//*
        Timestamp dt = rs.getTimestamp("datetime");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
        System.out.println(sdf.format(dt));
        */
        
        //得到日期中的月
        /**//*
         Calendar c = Calendar.getInstance();
        c.setTime(d);
        System.out.println(c.get(Calendar.MONTH));
         */
      }
      } catch (ClassNotFoundException e) {
        e.printStackTrace();
      } catch (SQLException e) {
        e.printStackTrace();
      } finally {
        try {
          if(rs != null) {
            rs.close();
            rs = null;
          }
          if(stmt != null) {
            stmt.close();
            stmt = null;
          }
          if(con != null) {
            con.close();
            con = null;
          }
        } catch (SQLException e) {
          e.printStackTrace();
        }
      }
  }
}
/**//*
+----------+----------+------+-----+---------+-------+
| Field  | Type   | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| date   | date   | YES |   | NULL  |    |
| time   | time   | YES |   | NULL  |    |
| datetime | datetime | YES |   | NULL  |    |
+----------+----------+------+-----+---------+-------+
*/

 

 

posted on 2012-06-26 18:34  阿童沐  阅读(1198)  评论(0编辑  收藏  举报