需要说明的一点,在输入任意时间时需要注意输入时间的大小,每个日期时间类型都有它的取值范围,具体情况请阅读MySQL的时间日期类型
如果该字段的数据类型为TIMESTAMP或DATETIME时,可以将其属性的默认值设置为当前时间戳
- 这种方法适合存入当前时间
- 使用default now(),将字段的默认值设置为当前时间戳,其中current_timestamp、current_timestamp()、localtime、localtime()、localtimestamp、localtimestamp()可以替代now(),均为同义词,效果相同
- 在输入数据时,不用给该字段输入数据,MySQL会自动初始化该的值为当前时间戳
- 需要说明一点是,TIMESTAMP的存储格式是UTC(世界时间格式),在查询时,MySQL会自动将该字段转化为当前时区的时间返回,而DATETIME只能返回当时初始化的时间
最简单,最笨的方法,直接输入数字和字符串
- 详细的输入要求请阅读MySQL的时间日期类型
在日期时间类型的字段中,MySQL允许输入字符串。我们可以创建Date类的对象,然后用SimpleDateFormate将当前时间转化为相应格式的字符串进行输入。
- 如果是输入当前时间,之间创建Date的对象,然后用SimpleDateFormate进行转化
- 如果是输入任意时间,先创建Date对象,然后根据字段的数据类型,调用相应的set方法
- 如,现需要向time数据库中的date表插入当前时间,表date只有一个数据类型为Date的字段
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestTime {
// 驱动程序
private static String diverName = "com.mysql.cj.jdbc.Driver";
// 链接字符创
private static String url = "jdbc:mysql://localhost:3306/time?useSSL=false&serverTimezone=UTC";
private static String userName = "root"; // 用户名
private static String passWord = "12345"; // 密码
public static void main(String[] args) {
Connection con = null; // 定义链接变量
PreparedStatement stat = null; // 定义SQL语句对象
ResultSet rs = null; // 定义结果集对象
try {
Class.forName(diverName);
} catch (ClassNotFoundException e) {
System.out.println("驱动加载失败!");
e.printStackTrace();
}
try {
con = DriverManager.getConnection(url, userName, passWord); // 连接数据库,获得链接对象
//创建当前时间
Date d = new Date(); // 注意是util包下的Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String date = sdf.format(d);
String sql = "insert into date values(?)";
stat = con.prepareStatement(sql); // 创建SQL语句对象,并加载
stat.setString(1, date);
stat.executeUpdate(); // 执行SQL语句
} catch (SQLException e) {
e.printStackTrace();
}
}
}
在PreparedStatement类中,有setDate(parameterIndex, x)、setTime(parameterIndex, x)、setTimestamp(parameterIndex, x)三种方法。如果字段的日期时间类型为DATE、TIME、TIMESTAMP这三种时,我们可以将时间转化为相应的时间日期类型进行输入。具体转化的方法在sql包下。
- 如果是输入当前时间,之间创建Date的对象(注意此时的Date是util包下的),然后调用sql包下的相应类进行转化
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Date;
public class TestTime {
// 驱动程序
private static String diverName = "com.mysql.cj.jdbc.Driver";
// 链接字符创
private static String url = "jdbc:mysql://localhost:3306/time?useSSL=false&serverTimezone=UTC";
private static String userName = "root"; // 用户名
private static String passWord = "12345"; // 密码
public static void main(String[] args) {
Connection con = null; // 定义链接变量
PreparedStatement stat = null; // 定义SQL语句对象
ResultSet rs = null; // 定义结果集对象
try {
Class.forName(diverName);
} catch (ClassNotFoundException e) {
System.out.println("驱动加载失败!");
e.printStackTrace();
}
try {
con = DriverManager.getConnection(url, userName, passWord); // 连接数据库,获得链接对象
//创建当前时间
Date d = new Date(); // 注意是util包下的Date
java.sql.Date date = new java.sql.Date(d.getTime()); // 转化成字段的数据类型
/*
* 如果字段的数据类型为TIME, Time time = new Time(d.getTime());
* 如果字段的数据类型为TIMESTAMP,Timestamp timestamp = new
Timestamp(d.getTime());
*
*/
String sql = "insert into date values(?)";
stat = con.prepareStatement(sql); // 创建SQL语句对象,并加载
stat.setDate(1, date);
stat.setDate(parameterIndex, x);
/*
*
* stat.setTime(1, time);
* stat.setTimestamp(1, timestamp);
*
*/
stat.executeUpdate(); // 执行SQL语句
} catch (SQLException e) {
e.printStackTrace();
}
}
}
- 如果是输入任意时间,先创建Calendar对象,然后根据字段的数据类型,调用相应的set方法输入数据,然后将Calendar转化为Date类型(注意此时的Date是util包下的),然后调用sql包下的相应类进行转化后输入。需要注意一点是,Calendar输出时,会将输入的月份加1。
package com.cn;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Date;
public class TestTime {
// 驱动程序
private static String diverName = "com.mysql.cj.jdbc.Driver";
// 链接字符创
private static String url = "jdbc:mysql://localhost:3306/time?useSSL=false&serverTimezone=UTC";
private static String userName = "root"; // 用户名
private static String passWord = "12345"; // 密码
public static void main(String[] args) {
Connection con = null; // 定义链接变量
PreparedStatement stat = null; // 定义SQL语句对象
try {
Class.forName(diverName);
} catch (ClassNotFoundException e) {
System.out.println("驱动加载失败!");
e.printStackTrace();
}
try {
con = DriverManager.getConnection(url, userName, passWord); // 连接数据库,获得链接对象
Calendar c = Calendar.getInstance(); // 创建Calendar对象
c.set(2019, 6, 29); // 根据日期时间类型的具体要求,调用相应的set方法
Date d = c.getTime(); // 将Calendar转化为util包下的Date类型
java.sql.Date date = new java.sql.Date(d.getTime()); // 转化为字段的数据类型
String sql = "insert into date values(?)";
stat = con.prepareStatement(sql); // 创建SQL语句对象,并加载
stat.setDate(1, date);
stat.executeUpdate(); // 执行SQL语句
} catch (SQLException e) {
e.printStackTrace();
}
}
}
- 当然,也可以使用SimpleDateFormate将字符串转化为util包下Date类型,然后根据字段的数据类型,转化为sql包下的相应的类型后,进行输入