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应用之通过存储过程方式批量插入数据
我们平时的测试过程中有一个环节就是准备测试数据,包括准备基础数据,准备业务数据,使用的场景包括压力测试,后台批量数据传输,前端大数据查询导出,或者分页打印等功能,准备测试数据我们通俗点讲就是造数据,根 ...
随机推荐
- C#文件系统管理【转】
目录 前言 Directory类和DirectoryInfo类 File类和FileInfo类 Path类 前言 管理文件系统主要是对计算机中文件和目录的管理,例如,读取文件信息.删除文件和读取目录信 ...
- JavaScript 你不知道的事 -- 关于函数
接上篇Javascript 你不知道的事,直接条列了: 每个函数创建时默认带有一个prototype属性,其中包含一个constructor属性,和一个指向Object对象的隐藏属性__proto__ ...
- Android批量图片加载经典系列——Volley框架实现多布局的新闻列表
一.问题描述 Volley是Google 2013年发布的实现Android平台上的网络通信库,主要提供网络通信和图片下载的解决方案,比如以前从网上下载图片的步骤可能是这样的流程: 在ListAdap ...
- java学习笔记13--反射机制与动态代理
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...
- 更改DNS轻松访问google.com,FaceBook,Youtube等
将默认的Dns更改为42.120.21.30即可打开 https://www.google.com/ https://www.facebook.com/ https://www.youtube.com ...
- android.content.res.Resources$NotFoundException: String resource ID #0x0
仔细检查是不是在settext的时候设置进去的时int属性的值,所以android会认为这是在strings中的值,所以会拿着这个int值当做string的id值去找,结果当然是找不到的.
- C#应用视频教程3.3 Halcon+C#测试
接下来我们考虑把Halcon的代码移植到C#程序上,首先找到halcon的dll(.NET类库有1.0,2.0,3.5的,如果你安装了更新版本的halcon则有更新的.NET类库,我们复制最新的dll ...
- C#基础视频教程7.3 如何编写简单游戏
前面我们大致实现了鸟的一圈轨迹(其实如果你不做这个,就用两个矩形块的碰撞检测代替也可以),跟所有前面的教程一样,草稿打完了就要设计封装成一个类.至少到目前为止我们已经知道了鸟的属性和方法,先不要管方法 ...
- 如何使用飞秋FeiQ实现两电脑通信(或传输文件)
如何使用飞秋FeiQ实现两电脑通信(或传输文件) 1. 在两天电脑上,分别按照飞秋FeiQ 我使用的绿色飞秋2013正式版 2. 使用一根网线,将两电脑的网口连接一起 3. 设置飞秋FeiQ的端口号不 ...
- AA MME设备内部错误
adobe audition 找不到所支持的音频设备 这是3.0的错误! 上面是cs6的错误的图 主要原因是以前安装过,没有注册表没有清理干净 解决方案: https://jing ...