我在将一个日期类型插入到MYSQL中时出现下面错误
java.sql.BatchUpdateException: Data truncation: Incorrect datetime value: '1' for column 'odate' at row 1
at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:648)
at com.shopping.dao.OrderDaoMySqlImpl.save(OrderDaoMySqlImpl.java:51)
at com.shopping.OrderMgr.save(OrderMgr.java:24)
at org.apache.jsp.order_jsp._jspService(order_jsp.java:76)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:852)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:584)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1508)
at java.lang.Thread.run(Thread.java:674)
到底是为什么呀

解决方案 »

  1.   

    要传入日期格式的值才可以。贴出代码和SQL配置看看。
      

  2.   

    插入日期格式的字符串吧 examp:
    insert into atable (odate) values(str_to_date('07/23/2009', '%m/%d/%Y'))
      

  3.   

    我将那个日期打印出来是Thu Jul 23 19:22:45 CST 2009,下面是代码
    public void save(SalesOrder so) {
    String sql = "insert into salesorder values(null,?,?,?,?)";
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rsKey = null;
    try {
    conn = DB.getConn();
    conn.setAutoCommit(false);
    pstmt = DB.getPrepareStmt(conn, sql,true);
    pstmt.setInt(1, so.getUser().getId());
    pstmt.setString(2, so.getAddr());
    System.out.println(so.getOdate());
    pstmt.setTimestamp(3, new Timestamp(so.getOdate().getTime()));
    //pstmt.setTimestamp(3, null);
    pstmt.setInt(4, so.getStatus());
    pstmt.executeUpdate();
    rsKey = pstmt.getGeneratedKeys();
    rsKey.next();
    int key = rsKey.getInt(1);
    String sqlRs = "insert into salesitem values(null,?,?,?,?)";
    pstmt = DB.getPrepareStmt(conn, sql);
    Cart cart = so.getCart();
    List items = cart.getItems();
    for(int i=0;i<items.size();i++){
    CartItem ci = (CartItem)items.get(i);
    pstmt.setInt(1, ci.getProduct().getId());
    pstmt.setDouble(2, ci.getPrice());
    pstmt.setInt(3, ci.getCount());
    pstmt.setInt(4,key);
    pstmt.addBatch();
    //pstmt.executeUpdate();
    }
    pstmt.executeBatch();
    conn.commit();
    conn.setAutoCommit(true);
    } catch (SQLException e) {
    e.printStackTrace();
    try {
    conn.rollback();
    } catch (SQLException e1) {
    e1.printStackTrace();
    }
    }finally {
    DB.closeRs(rsKey);
    DB.closeStmt(pstmt);
    DB.closeConn(conn);
    } }
      

  4.   

    格式不对,如果数据库里设计的是date型的话,插'2009-07-24 11:11:11'格式试试吧,数据库可不认识JAVA
      

  5.   

    pstmt.setTimestamp(3, new Timestamp(so.getOdate().getTime())); 
    我这样写应该没错哇
      

  6.   

    java.util.Date需要转化成java.sql.Date改成这样试试:
    pstmt.setTimestamp(3, new java.sql.Date(so.getOdate().getTime())); 
      

  7.   

    将java.util.Date改成java.sql.Date 只有日期没有时间啊
      

  8.   

    把表定义贴出来。直接定义成DATE型的最方便。那只需要:pstmt.setTimestamp(3, so.getOdate); 就行了。
      

  9.   

    使用java.text.*包中的SampleDateFomate类进行格式化时间格式的字符串,然后在插入数据就行了
      

  10.   

    用java.text.*包中的SampleDateFomate