最近在使用 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
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
TO_TIMESTAMP('05-08-2013 06.17.24.128000000', 'DD-MM-YYYY HH24.MI.SS.FF')
代码里面出现的错误,搞不好,想到直接登录Oracle SQL Developer 上了,手动插入,得到的SQL里面时间格式写成这样:
TO_TIMESTAMP('05-8月 -13 06.17.24.128000000 下午', 'DD-MON-RR HH.MI.SS.FF AM')
才可以成功插入表中!
谢谢楼上的回答!
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;该怎么做呢?
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.只是代码里面,无法操作!