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应用之通过存储过程方式批量插入数据
我们平时的测试过程中有一个环节就是准备测试数据,包括准备基础数据,准备业务数据,使用的场景包括压力测试,后台批量数据传输,前端大数据查询导出,或者分页打印等功能,准备测试数据我们通俗点讲就是造数据,根 ...
随机推荐
- 完整的ASP.NET存储过程分页,排序,鼠标移至变色
首先建立一个存储过程如下(MySQL数据库):CREATE DEFINER=`root`@`localhost` PROCEDURE `pagination`( in tbName var ...
- vxer
Virus Maker 或者 Virus eXchanger 的简称,(有时候中文也叫做毒客),是一群追求完美.极致代码的病毒程序员. 1.VXer简介: VXer热爱汇编,熟悉各种处理器架构,致力于 ...
- 移植QT5.6到嵌入式开发板(史上最详细的QT移植教程)
目前网上的大多数 QT 移植教程还都停留在 qt4.8 版本,或者还有更老的 Qtopia ,但是目前 Qt 已经发展到最新的 5.7 版本了,我个人也已经使用了很长一段时间的 qt5.6 for w ...
- Jackson 练习(一)
package com.yc.model; /** * 班级 * @author Administrator * */ public class ClassModel { private String ...
- Android两次后退键退出
转载请注明出处:http://blog.csdn.net/javacattle/article/details/41964045 仅仅要在 *.Java 文件里加入就可以 private int ba ...
- oracle 11g physical standby switchover
简介 SWITCHOVERS主要是在计划停机维护时用来降低DOWNTIME,如硬件维护.操作系统升级或是数据库rolling upgrade, 也可用来进行特殊情况下的数据库迁移. SWITCHOVE ...
- 解决Windows server 2012 R2 系统使用IIS8浏览Asp程序出现"An error occurred on the server when processing the URL"错误
进入IIS并将ASP里的“Send Error To Browser”设置为True后点击Appley保存即可 原因是IIS里的Asp设置禁用上当错误信息发送给浏览器,只要启用即可 如果没有Asp选项 ...
- 显示器驱动程序 NVIDIA Windows Kernel Mode Driver Version 已停止响应 并且己成功恢复 解决方法
原文:http://news.160.com/?p=1890 在玩游戏中 经常 出现显示器驱动程序 NVIDIA Windows Kernel Mode Driver Version 已停止响应 并且 ...
- Eclipse与Android源码中ProGuard工具的使用(代码混淆)
由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的 ...
- HDU4626+博弈
博弈... /* 博弈 对于当前人来说,如果完成自己的操作后,若mat[n][m]==0,则自己是胜者. 因为 如果mat其他位置不存在1了,肯定自己胜:如果存在1,则让下一位去反转那个1. */ # ...