Java中向MySQL存入当前时间或任意时间的几种方法

需要说明的一点,在输入任意时间时需要注意输入时间的大小,每个日期时间类型都有它的取值范围,具体情况请阅读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包下的相应的类型后,进行输入

你可能感兴趣的:(Java中向MySQL存入当前时间或任意时间的几种方法)