部分代码如下:
String startdate,enddate;//分别为其始日期和结束日期
SimpleDateFormat sy1=new SimpleDateFormat("yyyyMMdd");
java.util.Date sd1 = new java.util.Date();
java.util.Date ed1 = new java.util.Date();
System.out.println("input start date:");
startdate = BasicIo.readString();//输入起始日期
System.out.println("input end date:");
enddate = BasicIo.readString(); //结束日期
sd1=sy1.parse(startdate);//转为日期类型
ed1=sy1.parse(enddate);
//计算某一时间段所有员工的计件工资列表,indate为日期类型,数据库为MS SQL SERVER2000
String sql="select workername,product,sum(salary) as salary from workerpay "+
     "where indate between "+sd1+" and "+ed1+
     "group by workername,product";
我想把起始日期和结束日期传到sql查询语句中,实现查找要求,不知道该怎么实现,望高人指路!!
我输入startdate:20060202
enddate:20060204
出错:SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]第 1 行: 'Feb' 附近
有语法错误。    

解决方案 »

  1.   

    我用System.out.println(sd1);来查看日期结果为Thu Feb 02 00:00:00 CST 2006
    要怎么把日期格式转为和sql server2000日期类型相匹配
      

  2.   

    这个试试:GregorianCalendar cal = new GregorianCalendar();
    System.out.println(""+cal.get(GregorianCalendar.YEAR)+
    cal.get(GregorianCalendar.MONTH)+
    cal.get(GregorianCalendar.DAY_OF_MONTH)+
    cal.get(GregorianCalendar.HOUR_OF_DAY)+
    cal.get(GregorianCalendar.MINUTE)+
    cal.get(GregorianCalendar.SECOND));
      

  3.   

    date是Date类的
    SimpleDateFormat simpledateformat = new SimpleDateFormat("yyyy-MM-dd");
    String s = simpledateformat.format(date);
      

  4.   

    java.sql.date的日期格式为yyyy-MM-dd hh:mm:ss
    你可以先把日期用"yyyy-MM-dd hh:mm:ss"格式化一下,然后用PrepareStatement
    String sql="select workername,product,sum(salary) as salary from workerpay "+
         "where indate between ? and ? group by workername,product";
    PrepareStatemtn pstmt=dbConnection.PrepareStatement(sql);
    pstmt.setString(1,startdate);
    pstmt.setString(2,enddate);
    pstmt.executeQuery();
    应该就可以了吧。
      

  5.   

    java.sql.Date startdate;
    java.sql.Date enddate;  //注意:一定要用java.sql.Date类,不要用java.util.DateString sql="select workername,product,sum(salary) as salary from workerpay "+
         "where indate between ? and ? group by workername,product";
    PrepareStatemtn pstmt=dbConnection.PrepareStatement(sql);pstmt.setDate(1,startdate);
    pstmt.setDate(2,enddate);如果日期里必须包含时、分、表,可将startdate、enddate定义成java.sql.Timestamp类型。
    这样,不用先将日期转换成String,而且不用考虑数据库是sqlserver还是oracle或是别的数据库。
      

  6.   

    String sql="select workername,product,sum(salary) as salary from workerpay "+
         "where indate between "+sd1+" and "+ed1+
         "group by workername,product";
    ------------------------
    是不是应该用单引号啊,不过最好用prepareStatement了