我在sqlserver里面建立一个表Users,里面有个字段RegisterTime为TimeStamp类型,
sql语句是insert into Users(firstname,lastname,username,password,RegisterTime) values('li','yang','liyang','password','2005-01-01 10:30:30')
结果执行的时候报错“java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]???????? varchar ????? timestamp ??????? 'eBookShop.dbo.Users'?? 'RegisterTime'????? CONVERT ????????? ”
看来是类型不匹配的问题,请问大家日期类型数据怎么插入到sql表中?

解决方案 »

  1.   

    java 有TimeStamp类型 转过在插入
      

  2.   

    我已经通过下面语句:
    java.util.Date currentTime_fw = new java.util.Date();
    Timestamp Time_fw= new Timestamp(currentTime_fw.getTime());获得了这样的一个Timestamp类型的日期,但是如果要插入到sql表中该怎么插入呢?
    我的sql语句:
    StringBuffer sql = new StringBuffer("INSERT INTO Users(FirstName, LastName, UserName,Password,RegisterTime) ");
          sql.append("VALUES ('");
          sql.append(firstName); 
          sql.append("' ,'"); 
          sql.append(lastName);
          sql.append("' ,'"); 
          sql.append(userName);
          sql.append("' ,'");
          sql.append(password);
          sql.append("' ,'");
          sql.append(Time_fw.toString());//请帮我看看这句sql语句是否有错?
          sql.append("')");       
          s.executeUpdate(sql.toString());
      

  3.   

    要用PreparedStatement,
    在要插入的地方,先用?代替,
    然后再用setDate()或者
    什么方法把一个java.sql.Date
    对象关联起来,就可以了
      

  4.   

    Time_fw.toString()//你怎么把它变成了String了。不用转换的,直接可以插进去,不过类型应该是
    java.sql.Timestamp
      

  5.   

    我另外写了个类的啊/*
     * Created on 2005-9-2
     */
    import java.sql.Date;/**
     * @author raito
     */
    public class StringToDate {    /**
         * @param sign_date
         * @return
         */
        public static Date parse(String sign_date) {
            if(sign_date==null){
                return null;
            }else{
            Date date;
            System.out.print("#"+sign_date+"#");
            int year=Integer.parseInt(sign_date.substring(0,sign_date.indexOf("-")));
            int month=Integer.parseInt(sign_date.substring(sign_date.indexOf("-")+1,sign_date.lastIndexOf("-")));
            int day=Integer.parseInt(sign_date.substring(sign_date.lastIndexOf("-")+1,sign_date.length()));
            date=new Date(year-1900,month-1,day);
            return date;
            }
        }
    }
      

  6.   

    Time_fw.toString()//你怎么把它变成了String了。不用转换的,直接可以插进去,不过类型应该是
    java.sql.Timestamp
    ----------------------------------------
    我用的就是java.sql.Timestamp啊,我之前不把它转换成String类型不行的。
      

  7.   

    而且它会自动转换成String类型的
      

  8.   

    是你的日期格式的问题,应该看看你的sqlserver里的日期格式是什么,然后按照那个日期格式往里插入
      

  9.   

    把你的日期定义成Timestamp格式,然后Timestamp[]数组形式往里面写
      

  10.   

    楼上的,sql语句该怎么写啊,能不能说详细一点?
      

  11.   

    你的sql语句没错,只是你的时间格式与你在sql里设置的不同,所以才出错
      

  12.   

    但是sqlserver里面就是一个timestamp类型啊,没有其他的格式可以设置的了
      

  13.   

    sqlserver还有datetime格式“把时间用#包起来试试”这个是access的格式
      

  14.   

    Java code:
    DateFormat df=DateFormat.getInstance();
    Date date=new Date();
    String dt=df.format(date);
    String sql="insert into table values ('"+dt+"')";
      

  15.   

    sorry!应该如下才对:
    Date date=new Date();
    DateFormat df=DateFormat.getDateInstance(DateFormat.SHORT);
    String dt=df.format(date);
    String sql="insert into table values ('"+dt+"')";
      

  16.   

    timestamp是个什么样的数据类型啊?!
    我的目的实际上是为了插入一个日期型数据,但是在sql表中我把字段类型设置成timestamp,不要意思,看来是我把timestamp误以为就是datetime类型了,后来把该字段换成datetime类型就好了
      

  17.   

    晕~~用datetime完全可以符合你的需求了。
    你的错误无非就是数据类型不匹配,在数据库中是Timestamp型,而insert的时候是string,当然也就不对了,楼上很多提出把插入的数据转换为timestamp类型就行。如
    insert into @YOURTABLE(@data) values(@timestamp)不必要把@timestamp转换成string