最近在使用 libzdb封装的 oracle 数据库连接池,在操作数据库时,总是时间格式错误,请走过路过的各位大神给个解决办法,不胜感激!
 
 
Connection_T con = TradeService::ms_pInstance->m_pConnPool->GetConnection();     PreparedStatement_T p = Connection_prepareStatement(con,                      
"INSERT INTO TRADE_HIS(DEV_SN,COMPONENT_TYPE,MOD_MODEL_ID,MOD_SEQ_NUMBER,
                              TRADE_TYPE_ID,TRADE_CONTENT,TRADE_TIME)
VALUES(?,?,?,?,?,?,?)");       
PreparedStatement_setString(p, 1, "");     
PreparedStatement_setInt(p, 2, 2);     
PreparedStatement_setInt(p, 3, NULL);     
PreparedStatement_setInt(p, 4, 2);     
PreparedStatement_setInt(p, 5, 20175);     
PreparedStatement_setString(p, 6, "维护任务单和设备编号不一致");       
QString str = QString("to_timestamp('%1','yyyy-mm-dd hh24:mi:ss')")             
        .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));     QByteArray ba = str.toLatin1();     
const char* c_str = ba.data();     
PreparedStatement_setString(p, 7,c_str);     
if(TradeService::ms_pInstance->m_pConnPool->Insert(p, con) > 0)     
{         
    logger()->info("信息表更新");     
}     
else     
{         
    logger()->warn("更新信息表失败,将不处理该明细数据");         
    return;     

以下为打印的数据库错误:  
http://blog.csdn.net/zhiliaoblog/article/details/9814879
 当然oracle数据库时间格式问题,也考虑了,总是改不过来。   
现有表时间字段定义类型为:TIMESTAMP(6)   
单独在数据库中执行只有这种格式: 
TO_TIMESTAMP('05-8月 -13 06.17.24.128000000 下午', 'DD-MON-RR HH.MI.SS.FF AM') 
可以成功插入;   
有做过相关方面的大神,恳请赏个解决方案!LinuxQt数据库连接池Oracle

解决方案 »

  1.   

    TO_TIMESTAMP('05-8月 -13 06.17.24.128000000 下午', 'DD-MON-RR HH.MI.SS.FF AM') 建议修改为
    TO_TIMESTAMP('05-08-2013 06.17.24.128000000', 'DD-MM-YYYY HH24.MI.SS.FF') 
      

  2.   

    不好意思,求助帖里面没有说清楚:
    代码里面出现的错误,搞不好,想到直接登录Oracle SQL Developer 上了,手动插入,得到的SQL里面时间格式写成这样:
    TO_TIMESTAMP('05-8月 -13 06.17.24.128000000 下午', 'DD-MON-RR HH.MI.SS.FF AM') 
    才可以成功插入表中!
    谢谢楼上的回答!
      

  3.   

    问题出在 PreparedStatement_setString(p, 7,c_str);     这一步;
    PreparedStatement_setString 的第三个参数要求是 const char * ;
    为了将QString转化为const char * ,用了一下方法:QString str = QString("to_timestamp('%1','yyyy-mm-dd hh24:mi:ss.ff3')")             
             .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz"));     QByteArray ba = str.toLatin1();     
    const char* c_str = ba.data(); 但是,在执行插入操作时,得到错误ORA-01858;该怎么做呢?    
      

  4.   

    另外,在服务器命令行上
    SQL> insert into TRADE_HIS VALUES('1',null,'2',null,'2','21705',NULL,to_timestamp('2014-08-08 06:56:56.123','yyyy-mm-dd hh24:mi:ss.ff'));1 row created.只是代码里面,无法操作!