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语句时要替换掉数据库里的时间
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语句时要替换掉数据库里的时间
写了一个测试用正则去替换没问题,就是在那个方法你去执行是就报错,
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......"); }
试着这样去替换,真有意想不到的效果,谢谢你们,散分啦!