如何在数据库中插入Timestamp?

时间:2014-01-14 16:49:29

标签: java jdbc

我收到此错误:

  

java.lang.IllegalArgumentException:时间戳格式必须为yyyy-mm-dd   hh:mm:ss [.fffffffff]

这是我的java代码:

<%  int reg;

        String sdate = request.getParameter("sdate");
        //Timestamp ts=request.get
      //out.println(sdate);
         String text = "0000-00-00 00:00:00";
       Timestamp ts = Timestamp.valueOf(text);
       // Timestamp ts1=Timestamp.valueOf(sdate);
       //  Timestamp ts2=Timestamp.valueOf(edate);
    try{
          String s;
      Format formatter;
     Date date = new Date(sdate);
     //out.println(date);
      formatter = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
     s = formatter.format(date);
     out.println(s);
        PreparedStatement ps=cn.prepareStatement("insert into c1 values(?)");
                           // ps.setString(1,ts);
         ps.setTimestamp(1,ts);



                            int i=ps.executeUpdate();
                            if(i==1)
                        {
                       pw.println("record inserted");
                        }
                        else
                        {
                        pw.println("not iNSERTED");
                        }
                        //cn.close();

                       }
                 catch(Exception e)
                        {
                            out.println(e.toString());
                        }

    %>

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

String text = "0000-00-00 00:00:00";

不是有效日期。没有月份或日期的值为0

Timestamp.valueOf(text)将无法解析它。

至少使用

String text = "0000-01-01 00:00:00";

答案 1 :(得分:2)

Shakti,你需要解决这个错误。 java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]

然后看看你格式化日期的方式。 您需要更改下面的行

  formatter = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");

为:

 formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

注意日期中的hypen字符的区别和用法,而不是你正在使用的冒号字符。

更新1

确定。所以在@sotirios的评论之后,我决定做一些额外的研究,然后我遇到this post并学到了一些东西。你不能给出0000-00 ...日期配置,因为MySQL [使用“零日期”作为特殊占位符

简单明了的解决方案是从

更改日期字符串
String text = "0000-00-00 00:00:00";

至少

String text = "0001-01-01 00:00:00";

如果你真的想发送0000-00 -...日期字符串,我相信解决方案是指定“zeroDateTimeBehavior = convertToNull”作为MySQL连接的参数(在数据源URL中或作为附加财产),例如:

jdbc:mysql://localhost/myDatabase?zeroDateTimeBehavior=convertToNull

这将导致所有此类值都以NULL形式发送。

答案 2 :(得分:0)

我使用jdbc的本机时间戳类型:

Date date = myobject.getDate();

cstmt = conn.prepareCall("{call dbo.myproc(?)}");
cstmt.setTimestamp("date", new Timestamp(date.getTime())
cstmt.execute();