Exception: Excute SQL = SQL==>select count(*) as cnt from cost_unit where modify_date>to_date('{MAXDATE}','yyyy-mm-dd') ;DATASOURCE==>default ;PARAMLIST==>[] ;
java.sql.SQLException: ORA-01841: (完整) 年份值必须介于 -4713 和 +9999 之间, 且不为 0 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:590)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1973)
at oracle.jdbc.ttc7.TTC7Protocol.fetch(TTC7Protocol.java:1231)
at oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.java:2616)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2963)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:658)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:584)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
这个问题该怎么解决,拼装sql语句时要替换掉数据库里的时间

解决方案 »

  1.   

    为什么要转成to_char后比较呢,用date比较更好啊
      

  2.   


    写了一个测试用正则去替换没问题,就是在那个方法你去执行是就报错,
    public void run() {
    _log.showLog("子线程开始运行........................................."
    + this.getName()); // 取Maxdate的值,进行替换
    String maxdate = "1901-01-01";
    if (_z.getMAXDATESQL() != null && !_z.getMAXDATESQL().equals("")) {
    daoparams = new DaoTool().newDaoParam(_z.getMAXDATESQL());
    daoparams.setDatasource(_z.getTARGET_DBNAME());
          Map maxdatemp = new DaoTool().RowSet2Map(_dao.query(daoparams));
    maxdate = (String) maxdatemp.get("maxdate");
    }


    // 1.判断源数据库是否能连上
    // source_dbname 源数据库
    _log.showLog("子线程开始运行......1111...."+_z.getSYN_TYPE1());
    if (_z.getSYN_TYPE1().equals("1")) { _log.showLog("子线程开始运行...........2222........" );
    System.out.println("{MAXDATE}".replaceAll("\\{MAXDATE\\}", "2011-08888"));
    StringBuffer sql =new StringBuffer( "select count(*) as cnt from ");
    sql.append( _z.getSOURCE_TABLENAME() + " where ");
    sql.append( _z.getSOURCE_WHERESQL());
    System.out.println("IntegegrationTaskBo11111111111111:"+sql);
      //  String sss= getFormatString(sql.toString(), "MAXDATE", maxdate);
    DaoParams daoparams1 = DaoTool.newDaoParam(sql.toString().replaceAll("\\MAXDATE\\", maxdate));
    _log.showLog("子线程开始运行.................3333............"+sql.toString());
    daoparams1.setDatasource(_z.getSOURCE_DBNAME());
    _log.showLog("子线程开始运行.................4444............."+_z.getSOURCE_DBNAME());
    Map mp = DaoTool.RowSet2Map(_dao.query(daoparams1));
    _log.showLog("子线程开始运行.................5555............");
    if (mp == null) {
    // 写入日志
    _log.showLog("ERROR:1.无法连接源数据库对应数据表!!.."); writeLog("ERROR:1.无法连接源数据库对应数据表!!", "0");
    return;
    } else {
    String cnt = (String) mp.get("cnt");
    sumnum = Integer.parseInt(cnt);
    }
    _log.showLog("子线程开始运行................6666......"); }
      

  3.   

    OK,解决了, sql.append( _z.getSOURCE_WHERESQL().replaceAll("\\{MAXDATE\\}", maxdate)); 
    试着这样去替换,真有意想不到的效果,谢谢你们,散分啦!