数据库中插入日期-
[数据库]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 | | +----------+----------+------+-----+---------+-------+ */