oracle 使用occi方式 批量插入多条数据
if (vecInfo.empty()) {
return ; //数据为空,不上传,不上传标志设置为1,只有0表示上传成功
}
std::string strUserName = userName;
std::string strPasswd = passWd;
std::string strDbName;
std::string strIp = ip;
std::string strPort = port;
if (strPort.empty()) {
strPort = ""; //如果输入的数据为空,设置默认值
}
if (dbName.empty()) {
strDbName = "orcl";//如果输入的数据为空,设置默认值
}
else {
strDbName = dbName;
}
std::string strSrvName = strIp + ":" + strPort + "/" + strDbName;//"10.194.98.34:1521/orcl"; std::cout << "数据库连接信息为:" << strSrvName << std::endl; Environment *env = Environment::createEnvironment("ZHS16GBK", "UTF8");
Connection * conn = NULL;
Statement * stmt = NULL;
if (NULL == env) { return -;
} try
{
conn = env->createConnection(strUserName, strPasswd, strSrvName);
if (conn == NULL) { return -;
} stmt = conn->createStatement(); std::string strSQL = "INSERT INTO VDS.LOG_OPERATION (USER_ID, OPERATOR, IP,MAC,OPERATOR_ORG_ID,OPERATOR_ORG_NAME,APP_CODE,OBJECT_ORG_IDS,OBJECT_ORG_NAMES,OPERATOR_OBJECT_TYPE,OPERATOR_OBJECT_KEYS,OPERATOR_OBJECT_VALUES,BUSINESS,ACT,OPERATE_RESULT,SEARCH_INFO,CONTENT,CREATOR,CREATE_TIME,UPDATE_TIME) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,current_timestamp,current_timestamp)";
stmt->setSQL(strSQL);
int count = vecInfo.size();
stmt->setMaxIterations(count); //最多一次性批量插入的最大数据
stmt->setMaxParamSize(, );
stmt->setMaxParamSize(, );
stmt->setMaxParamSize(, );
stmt->setMaxParamSize(, );
stmt->setMaxParamSize(, );
stmt->setMaxParamSize(, );
stmt->setMaxParamSize(, );
stmt->setMaxParamSize(, );
stmt->setMaxParamSize(, );
stmt->setMaxParamSize(, );
stmt->setMaxParamSize(, );
stmt->setMaxParamSize(, );
stmt->setMaxParamSize(, );
stmt->setMaxParamSize(, );
stmt->setMaxParamSize(, );
stmt->setMaxParamSize(, );
stmt->setMaxParamSize(, );
//std::string strSQL = "INSERT INTO VDS.LOG_OPERATION (USER_ID, OPERATOR, IP,MAC,OPERATOR_ORG_ID,OPERATOR_ORG_NAME,APP_CODE,OBJECT_ORG_IDS,OBJECT_ORG_NAMES,OPERATOR_OBJECT_TYPE,OPERATOR_OBJECT_KEYS,OPERATOR_OBJECT_VALUES,BUSINESS,ACT,OPERATE_RESULT,SEARCH_INFO,CONTENT,CREATOR,CREATE_TIME,UPDATE_TIME) VALUES "; for (int j = ; j< count ; j++){
int i = ; stmt->setString(i++, *(vecInfo.at(j)._user_id));
stmt->setString(i++, *(vecInfo.at(j)._operator));
stmt->setString(i++, *(vecInfo.at(j)._ip));
stmt->setString(i++, *(vecInfo.at(j)._mac));
stmt->setString(i++, *(vecInfo.at(j)._operator_org_id));
stmt->setString(i++, *(vecInfo.at(j)._operator_org_name));
stmt->setString(i++, *(vecInfo.at(j)._app_code));
stmt->setString(i++, *(vecInfo.at(j)._object_org_ids));
stmt->setString(i++, *(vecInfo.at(j)._object_org_names));
stmt->setString(i++, *(vecInfo.at(j)._operator_object_type));
stmt->setString(i++, *(vecInfo.at(j)._operator_object_keys));
stmt->setString(i++, *(vecInfo.at(j)._operator_object_values));
stmt->setString(i++, *(vecInfo.at(j)._business));
stmt->setString(i++, *(vecInfo.at(j)._act));
stmt->setInt(i++, vecInfo.at(j)._operate_result);
stmt->setString(i++, *(vecInfo.at(j)._search_info));
stmt->setString(i++, *(vecInfo.at(j)._content));
stmt->setString(i++, *(vecInfo.at(j)._creator)); if (j != count - ) //count至少为1
{
stmt->addIteration();
}
}
//
//for (int i = 0; i < vecInfo.size(); i++) {
// std::string strVal;
// strVal += "("; // strVal += "'" + *(vecInfo.at(i)._user_id)+"',";
// strVal += "'" + *(vecInfo.at(i)._operator) + "',";
// strVal += "'" + *(vecInfo.at(i)._ip) + "',";
// strVal += "'" + *(vecInfo.at(i)._mac) + "',";
// strVal += "'" + *(vecInfo.at(i)._operator_org_id) + "',";
// strVal += "'" + *(vecInfo.at(i)._operator_org_name) + "',";
// strVal += "'" + *(vecInfo.at(i)._app_code) + "',";
// strVal += "'" + *(vecInfo.at(i)._object_org_ids) + "',";
// strVal += "'" + *(vecInfo.at(i)._object_org_names) + "',";
// strVal += "'" + *(vecInfo.at(i)._operator_object_type) + "',";
// strVal += "'" + *(vecInfo.at(i)._operator_object_keys) + "',";
// strVal += "'" + *(vecInfo.at(i)._operator_object_values) + "',";
// strVal += "'" + *(vecInfo.at(i)._business) + "',";
// strVal += "'" + *(vecInfo.at(i)._act) + "',";
// std::stringstream iToStr;
// std::string strResult;
// iToStr << vecInfo.at(i)._operate_result;
// iToStr >> strResult;
// strVal += "" + strResult + ",";
// strVal += "'" + *(vecInfo.at(i)._search_info) + "',";
// strVal += "'" + *(vecInfo.at(i)._content) + "',";
// strVal += "'" + *(vecInfo.at(i)._creator) + "',";
// strVal += "current_timestamp,current_timestamp"; // strVal += ")";
// if (i != vecInfo.size() - 1) {
// strVal += ", ";
// }
// //else {
// // strVal += ";";
// //} // strSQL += strVal;
//}
//std::cout << "sql为: " << std::endl;
//std::cout << strSQL << std::endl; int iRet = stmt->executeUpdate(); }
catch (SQLException ex) {
std::cout << ex.getMessage() << std::endl;
return -;
}
catch (...) { return -;
} //释放连接
conn->terminateStatement(stmt);
env->terminateConnection(conn);
env->terminateEnvironment(env);
return ;
批量插入一定要注意的事项:
stmt->setMaxIterations(count); count值必须同要插入的数据条数一样。
setMaxParamSize需要对string类型的设置最大参数的大小。 遇到的错误有:
ORA-32109: invalid column or parameter position
ORA-32132: maximum iterations cannot be changed ->setMaxIterations和setMaxParamSize引起的问题
oracle 使用occi方式 批量插入多条数据的更多相关文章
- mybatis oracle两种方式批量插入数据
mybatis oracle两种方式批量插入数据 注意insert,一定要添加: useGeneratedKeys="false" ,否者会报错. <insert id=&q ...
- mysql命令行批量插入100条数据命令
先介绍一个关键字的使用: delimiter 定好结束符为"$$",(定义的时候需要加上一个空格) 然后最后又定义为";", MYSQL的默认结束符为" ...
- oracle使用一条语句批量插入多条数据
例如我有一个test表 create table (stuid int,name varchar(20); 插入多条数据,注意不能直接使用insert into test values(1,'a'), ...
- django基础之day08,利用bulk_create 批量插入成千上万条数据
bulk_create批量插入数据 models.py文件 class Book(models.Model): title=models.CharField(max_length=32) urls.p ...
- mybatis 注解的方式批量插入,更新数据
一,当向数据表中插入一条数据时,一般先检查该数据是否已经存在,如果存在更新,不存在则新增 使用关键字 ON DUPLICATE KEY UPDATE zk_device_id为主键 model ...
- 使用SqlBulkCopy批量插入多条数据进入表中
由于工作中项目需求结算一次生成一批相同批次号的数据插入一个表中,然后再通过另一页面展示出来,所以需要用到一次性插入一批数据,所以就采用了SqlBulkCopy插入一批数据 1 public stati ...
- MySQL批量插入多条数据方便测试
批量插入流程 数据库字段 delimiter create procedure doinsert3() begin declare i int; declare j int; ; ; ) do ins ...
- mysql存储过程命令行批量插入N条数据命令
原文:http://blog.csdn.net/tomcat_2014/article/details/53377924 delimiter $$ create procedure myproc () ...
- mysql应用之通过存储过程方式批量插入数据
我们平时的测试过程中有一个环节就是准备测试数据,包括准备基础数据,准备业务数据,使用的场景包括压力测试,后台批量数据传输,前端大数据查询导出,或者分页打印等功能,准备测试数据我们通俗点讲就是造数据,根 ...
随机推荐
- 5 cocos2dx 3.0源码分析 渲染 render
渲染,感觉这个挺重要了,这里代入一个简单的例子 Sprite 建立及到最后的画在屏幕上, 我们描述一下这个渲染的流程: 1 sprite 初始化(纹理, 坐标,及当前元素的坐标大小信息) 2 主循 ...
- cocob优化算法
cocob算法是一个启发式的算法,针对SGD不需要设置learning rate. https://github.com/bremen79/cocob
- Unity3D新手教学,让你十二小时,从入门到掌握!(三 ) [转]
版权声明:本文为Aries原创文章,转载请标明出处.如有不足之处欢迎提出意见或建议,联系QQ531193915 这一讲,我会教大家如何写碰撞检测的代码,然后还会教大家如何使用我介绍给大家的第一个Uni ...
- SQL代理无法启动
SQL代理无法启动,版本2008R2,启动账户修改为新的管理员账户后启动不了,本地账户可以, 处理: 安全性-登录名添加该用户
- 【SSH三大框架】Hibernate基础第十一篇:对继承映射的操作
在java中.类之间能够有继承关系.可是在数据库中是没有继承关系的.只是Hibernate是为了把面向对象的关系反映到数据库中.Hibernate为我们提供了3种方案: 第一.一个继承体系放在一张表中 ...
- 如何在CentOS 7中添加新磁盘而不用重启系统
导读 对大多数系统管理员来说扩充 Linux 服务器的磁盘空间是日常的工作之一.因此这篇文章会通过使用 Linux 命令,在 CentOS 7 系统上演示一些简单的操作步骤来扩充您的磁盘空间而不需要重 ...
- easyui window refresh 刷新两次解决办法
这样写刷新两次 $("#windowid").window('refresh','url01.php'); $("#windowid").window('ope ...
- sql server Service Broker 相关查询
sql server Service Broker 相关查询 -- 查看传输队列中的消息 --如果尝试从队列中移除时,列将表明哪里出现了问题 select * from sys.transmissio ...
- 总结js(Iframe、window.open、window.showModalDialog)父窗口与子窗口之间的操作
http://hi.baidu.com/yashua839/blog/item/131fdb2fe547ef221f3089af.html一.Iframe 篇 //&&&&am ...
- win7 下配置 java 环境变量[转]
首先,你应该已经安装了 java 的 JDK 了,笔者安装的是:jdk-7u7-windows-x64 接下来主要讲怎么配置 java 的环境变量,也是为了以后哪天自己忘记了做个备份 1.进入“计算机 ...