用JAVA操作数据库Datetime数据

Java日期操作与数据库交互
本文介绍了如何使用Java进行日期格式化及与数据库之间的日期数据交互。包括利用Calendar类进行日期时间的操作,以及如何通过PreparedStatement将Java中的日期类型正确地插入数据库中。此外,还涉及了从数据库中获取日期时间数据的方法。

如何将Date类型插入数据库中,成为好多人的一个不小的障碍。

当然,并不一定要在外部插入时间,因为在数据库中,可以让它自动插入,比如:MSSQL里面,用getdate()来插入当前时间,而在Insert时,便可以不用管它了。但有的时候还是避免不了,要手工插入时间,以更新数据库。

1、java.util.Calendar 格式化时间

Calendar cal = new GregorianCalendar();//Calendar cal=Calendar.getInstance();得到当前系统的日期和时间//cal.setTime(Date d)//将指定的日期时间设置到Calendar对象上去.
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH)+1;
int day = cal.get(Calendar.DAY_OF_MONTH);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
String week = "";
switch(dayOfWeek) {
case 1:
week = "星期天"; break;
case 2:
week = "星期一"; break;
case 3:
week = "星期二"; break;
case 4:
week = "星期三"; break;
case 5:
week = "星期四"; break;
case 6:
week = "星期五"; break;
default:
week = "星期六"; break;

int hour = cal.get(Calendar.HOUR_OF_DAY);  // 24小时制
// int hour = cal.get(Calendar.HOUR); // 12小时制
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
String h,m,s;
if(hour<10) h = "0"+hour; else h = hour+"";
if(minute<10) m = "0"+minute; else m = minute+"";
if(second<10) s = "0"+second; else s = second+"";

在JSP中输出是:

今天是: <%=year%>年<%=month%>月<%=day%>日<%=week%> <%=h%>:<%=m%>:<%=s%>

结果: 今天是: 2006年4月14日星期五 05:35:26

2、在数据库中插入时间

PreparedStatement ps = con.prepareStatement("insert into TableName(dAddTime) values(?)");
这里有三种方式:
1) ps.setDate(1,new java.sql.Date(System.currentTimemillis()));
2) ps.setTime(2,new java.sql.Time(System.currentTimemillis()));
3) ps.setTimestamp(3,new java.sql.Timestamp(System.currentTimemillis()));
第一种只插入年月日 0000-00-00
第二种只插入时间 00:00:00
第三种则插入完整的时间 0000-00-00 00:00:00.000 .000是毫秒数。

3、取出数据库时间

通常只有两种:
1) getDate(String colname); // 取出日期 格式:0000-00-00
2) getTimestamp(String colname); // 取出日期和时间 格式:0000-00-00 00:00:00.000
3) getTime(String colname); // 只取出时间部份 格式:00:00:00 几乎不用,因为没有人只会取出时间,而不用日期。

在JDK 1.1后,java.util.Date 类型的大多数方法已经不推荐使用了。代替它的是Calendar。

而在java.sql.Date 和 java.util.Date之间,有些微妙的关系。

Java 代码中向 MySQL 数据库的 `datetime(6)` 数据类型字段传值,可借助 JDBC 实现。`datetime(6)` 能存储包含毫秒的日期和时间信息,精确到微秒。以下为详细的实现步骤及示例代码: #### 1. 加载 JDBC 驱动 要先加载 MySQL 的 JDBC 驱动,示例代码如下: ```java Class.forName("com.mysql.cj.jdbc.Driver"); ``` #### 2. 建立数据库连接 使用数据库的 URL、用户名和密码建立连接: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; String url = "jdbc:mysql://localhost:3306/your_database"; String username = "your_username"; String password = "your_password"; Connection connection = DriverManager.getConnection(url, username, password); ``` #### 3. 准备 SQL 语句 使用 `PreparedStatement` 准备 SQL 语句,示例如下: ```java import java.sql.PreparedStatement; import java.sql.SQLException; String sql = "INSERT INTO your_table (your_datetime_column) VALUES (?)"; PreparedStatement preparedStatement = connection.prepareStatement(sql); ``` #### 4. 设置参数 使用 `java.sql.Timestamp` 类型的对象来设置 `datetime(6)` 字段的值,示例如下: ```java import java.sql.Timestamp; import java.time.LocalDateTime; LocalDateTime localDateTime = LocalDateTime.now(); Timestamp timestamp = Timestamp.valueOf(localDateTime); preparedStatement.setTimestamp(1, timestamp); ``` #### 5. 执行 SQL 语句 执行插入操作: ```java preparedStatement.executeUpdate(); ``` #### 6. 关闭资源 操作完成后,关闭 `PreparedStatement` 和 `Connection`: ```java preparedStatement.close(); connection.close(); ``` ### 完整示例代码 ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Timestamp; import java.time.LocalDateTime; public class InsertDateTime6 { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/your_database"; String username = "your_username"; String password = "your_password"; try { // 加载 JDBC 驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 建立数据库连接 Connection connection = DriverManager.getConnection(url, username, password); // 准备 SQL 语句 String sql = "INSERT INTO your_table (your_datetime_column) VALUES (?)"; PreparedStatement preparedStatement = connection.prepareStatement(sql); // 设置参数 LocalDateTime localDateTime = LocalDateTime.now(); Timestamp timestamp = Timestamp.valueOf(localDateTime); preparedStatement.setTimestamp(1, timestamp); // 执行 SQL 语句 preparedStatement.executeUpdate(); // 关闭资源 preparedStatement.close(); connection.close(); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值