Java 向数据库中输入 datetime类型数据


        mysql数据库中的数据是datetime类型的,java得到的是String类型的时间戳(秒值),如何将这个java的时间戳写入到mysql数据表中呢?  就涉及到数据类型的转换问题,本文就是讲怎么转的问题。

         java的时间戳(字符串型秒值)-------->java.util.Date -------->java.sql.Timestamp  这样才可以写入到表中了。

代码如下:

                        String sec="154266208342";   //时间戳
                        //将字符串时间戳转成时期时间型的字符串,
ZhuanHuanTools是自己写得一个工具类见后面代码
       String dateString = ZhuanHuanTools.timeStamp2Date(sec, "yyyy-MM-dd HH:mm:ss"); 

       //把上面语句得到的日期型字符串转成java.utils.Date型变量dateTemp
SimpleDateFormat sdf =   new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
Date dateTemp=null;
try {
dateTemp = sdf.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();

//java.util.Date转java.sql.Timestamp
Timestamp timeStamp1 = new Timestamp(dateTemp.getTime());

                                //上面己经转换完了,下面的代码只是如何用,比如将结果写入到你的pojo对象rc中,初学者不知道就不用看

rc.setInCarTime(timeStamp1);
                                //再将rc对象写入到数据表中,

                                int myid=camerSetDao.setRecognition(rc);

public class ZhuanHuanTools {
/**
   * 时间戳转换成日期格式字符串
   * @param seconds 精确到秒的字符串
   * @param formatStr 格式字符串,比如:"yyyy-MM-dd HH:mm:ss"
   * @return
   */
public static String timeStamp2Date(String seconds,String format) {
if(seconds == null || seconds.isEmpty() || seconds.equals("null")){
return "";
}
if(format == null || format.isEmpty()) format = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(new Date(Long.valueOf(seconds+"000")));
}
}

---------------------------下面是参考资料---------------------------

java可以使用jdbc访问数据库,但对时间这个问题很无奈。我们通常使用的时间是java.utils.Date。后来尝试使用java.sql.Date朝数据库中写入时间,发现了一个问题,这些写入的时间,无一例外的没有后面的小时等信息,如下图所示。 

没有红色框框信息

经过搜索,理解了相关的问题。 
java.sql.Date只表示数据库中日期的部分,如果想向数据库中写入完整的时间,如2016-12-11 17:10:25.000 则需要使用java.sql.Timestamp这个类

下面,我给大家介绍下两种东西的使用方法,也算是给自己记录了一份学习笔记。

字符串和java.utils.Date相互转换

我们使用DateFormat 类来进行String和Date的转换,而java.utils.Date是我们在java编程中经常使用的。

字符串转化为Date类型

DateFormat format = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");    // 这里填写的是想要进行转换的时间格式
String str = "2016-12-11 17:17:10";         // 时间字符串

java.utils.Date date = null;
try{
date = format.parse(str);
}catch(Exception e){
e.printStackTrace();
}

Date类型转化为字符串

DateFormat format = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");    // 这里填写的是想要进行转换的时间格式
Date date = new java.utils.Date();      // 获取当前时间
String str = format.format(date);
// str = "2016-12-11 17:17:10"

java.sql.Date向数据库写入日期

这里就需要java.sql.Date和java.utils.Date进行相互转换了,这个转换一般比较容易,利用构造方法和.getTime() 方法进行转化。

java.utils.Date date = new java.utils.Date();   // 获取当前时间
java.sql.Date sql_date = new java.sql.Date(date.getTime()); //转换成java.sql.Date

接着使用PreparedStatement 向数据库中写入时间,即可。

ps.setDate(1, new java.sql.Date(date.getTime()));   // 设置项

java.sql.Timestamp向数据库中写入时间

需要注意的是,上边一种方法只能将日期写入到数据库中,为了能够将时间精确到s甚至是ms。我们需要使用java.sql.Timestamp 类型。 
java.sql.Timestamp 类型的构造函数也可以使用Long进行初始化

Date date = new Date();  
Timestamp timeStamp = new Timestamp(date.getTime());  

故在生成java.utils.Date时,将时间精确到s,然后使用预编译语句执行SQL语句

Date date = new Date();  
Timestamp timeStamp = new Timestamp(date.getTime()); 
 sql= "insert into flowmeter2(total,std_flow,temp,press,time) values(?,?,?,?,?)";   
        try {  
            PreparedStatement ps = connection.prepareStatement(sql);  
            ps.setString(1, total);  
            ps.setString(2, std_flow);  
            ps.setString(3, temp);  
            ps.setString(4, press);  
            ps.setTimestamp(5, timeStamp);  
            ps.executeUpdate();  
            System.out.println("添加成功!");  
            connection.close();  

便可以将时间精确到ms级

猜你喜欢

转载自blog.csdn.net/jintingbo/article/details/80844402