异常:java.sql.SQLException: 从字符串向 datetime 转换时失败。
at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368)
at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2816)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2254)
at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:631)
at net.sourceforge.jtds.jdbc.JtdsStatement.processResults(JtdsStatement.java:584)
at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQL(JtdsStatement.java:546)
at net.sourceforge.jtds.jdbc.JtdsStatement.executeImpl(JtdsStatement.java:723)
at net.sourceforge.jtds.jdbc.JtdsStatement.execute(JtdsStatement.java:1157)
at com.mchange.v2.c3p0.impl.NewProxyStatement.execute(NewProxyStatement.java:1006)
源代码:
DateUtils dateUtil = new DateUtils();
String writeTime = dateUtil.getDate();//这个地方返回的是一个String类型,但是数据库里需要datetime类型 Date createTime = null;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
createTime = dateFormat.parse(writeTime);
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println("create time : " + writeTime);
StringBuffer sb2 = new StringBuffer("insert into xx.loginfo(userid,fullname,logtitle,logtext,createtime) values(");
sb2.append(userId).append( ",'" ).append("love','" ).append( title).append( "','").append(createTime).append("','").append( content).append("')");
String sql2 = sb2.toString();

解决方案 »

  1.   

    DateUtils dateUtil = new DateUtils();
    String writeTime = dateUtil.getDate();//这个地方返回的是一个String类型,但是数据库里需要一个datetime类型,所以需要转换下
    Date createTime = null;
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    try {
    createTime = dateFormat.parse(writeTime);
    } catch (ParseException e) {
    e.printStackTrace();
    }
    System.out.println("create time : " + writeTime);
    StringBuffer sb2 = new StringBuffer("insert into xx.loginfo(userid,fullname,logtitle,logtext,createtime) values(");
    sb2.append(userId).append( ",'" ).append("love','" ).append( title).append( "','").append(createTime).append("','").append( content).append("')");
    String sql2 = sb2.toString();
      

  2.   

    DateUtils dateUtil = new DateUtils();
    String writeTime = dateUtil.getDate();
    Date createTime = null;
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    try {
    createTime = dateFormat.parse(writeTime);
    } catch (ParseException e) {
    e.printStackTrace();
    }
    System.out.println("create time : " + writeTime);
    StringBuffer sb2 = new StringBuffer("insert into xx.loginfo(userid,fullname,logtitle,logtext,createtime) values(");
    sb2.append(userId).append( ",'" ).append("love','" ).append( title).append( "','").append(createTime).append("','").append( content).append("')");
    String sql2 = sb2.toString();
    本来想加个红色,怎么弄都不对
    还是贴源码吧
      

  3.   

    请问一下你的dateUtil.getDate()  返回的那个字符串  是否符合("yyyy-MM-dd HH:mm:ss")
    这种格式的呢! 
    要是不符合那是转不了的!
      

  4.   

    append(createTime)这里拼接createTime自动会调用toString()方法,实际上拼接的是个字符串。
    两种解决方案:
    1.使用PreparedStatement对象
    2.这样拼接:append("love',to_date('").append(writeTime).append("','yyyy-mm-dd hh24:mi:ss'),")
      

  5.   

    public class DateUtils { private static final Logger log = Logger.getLogger(DateUtils.class);

    public static String getDate(){
    return getDate(new Date());
    }

    public static String getDate(Date time){
    SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    log.info("DateUtils time dayOfMonth " + time.getDate() + " " + sd.format(time));
    return sd.format(time);
    }

    }
      

  6.   

    只要你的格式正确 即使是 String 类型  插在数据库里面去
    数据库会自动做处理的
    也不需要你做过多的处理!
      

  7.   

    你就是想取 当前系统时间是吗?
    我是这样做处理的
                 Calendar c = Calendar.getInstance();
        SimpleDateFormat sdf=new  SimpleDateFormat("yyyy-MM-dd");   
        c  =  Calendar.getInstance(Locale.CHINESE);
        String strDate=sdf.format(c.getTime());
    strDate  就可以直接放在数据库里面去了..
        
      

  8.   


    就是想取系统时间然后用这个("yyyy-MM-dd HH:mm:ss");格式插入到数据库中
      

  9.   

    直接插入strDate就回报错:
    从字符串向 datetime 转换时失败。
    因为数据库里的数据类型是datetime类型的,所以把String类型的时候插进去会出错。。
      

  10.   

    你不用datetime
     你换用 date 试哈字!
    我记得以前用datetime 好象这样可以的
    但是我现在做的一个项目就是用的 date 类型的
      

  11.   

    是不是stringingbuffer的问题?
    我用 string 写sql语句怎么就可以插进去啊?
      

  12.   


    String sql2 = sb2.toString();System.out.println(sql2);看看sql 语句
      

  13.   

    谢谢哥们
    好象我的eclipse有问题 
    换String 写sql语句就没问题了。。
      

  14.   

    不知道数据库中的datetime对应的是java中的什么类型。java.sql包下有三个类是与时间相关的:Date,Time、Timestamp。但sql语句中的Date得用java.sql.Date吧,parse出来的是java.util.Date,JDBC指定转换异常