DTL中插入和删除数据的两种方法总结

数据开发面试:DQL,DDL,DTL 频繁查询但是更新较少的字段>>当表中的数据发生变化(插入、更新、删除)时,索引也需要同步更新, 频繁更新会降低索引性能。DELETE掉的数据可以回滚(在事务未提交的前提下), 以及闪回查询。最多15条>>b表的每一条数据都能和a表匹配上,产生笛卡尔积。经常用于数据过滤的字段(where或having后面的字段):用于过滤连接后的结果集,可能会丢失左表中没有匹配的行。经常用于范围查询的字段>>索引可以加速查询范围的定位。的行(即左表中的行在右表中没有找到匹配的行)。会保留合并后结果集中的所有行,包括重复行。 阅读详情

     在DTL中,对数据进行插入和删除操作,目前发现有两种方法,一是用STL方法,一是用IndexDBView类操作;昨天就实验了这两种方法操作,DTL真不是一般的强大啊,可以像STL的操作,也可以直接执行SQL语句(ODBC封装貌似都可以吧),效率也还不错,当然,得选择合适的方法。(今天发现,对DTL操作,需要添加的库就是DTL和odbc2个即可,可以不添加odbcinst和stdc++库)

一、用index.htm自带的ReadData和WriteData进行操作,代码如下:

//将表内容存到vector
vector<Example> ReadData() {

	vector<Example> results;
	DBView<Example> view("example",Test());

	DBView<Example>::select_iterator read_it = view.begin();
	for ( ; read_it != view.end();  ++read_it)
	{
		results.push_back(*read_it);
	}
	return results;
}
//将vector到写到view
//用copy显然会重复;STL操作只能在末尾操作
void WriteData(const vector<Example> &examples)
{
	DBView<Example> view("example",Test());
	DBView<Example>::insert_iterator write_it = view ;
	//此时view是在最后,怎么搞到begin位置呢?
	copy(examples.begin(), examples.end(), write_it );
}
原带的read 和write方法,问题在于,写的时候,用的copy方法,而且不能将写的iterator调到开始对数据表进行重刷

	vector<Example> results = ReadData();
	DBView<Example> view("example",Test());
	DBView<Example>::delete_iterator del_it = view ; //每次读出来先把表里面的内容删除
	copy(results.begin(), results.end(), del_it );   

	Example E;
	E.exampleInt=5;
	E.exampleStr="insert5";
	E.exampleDouble=6.4;
	results.push_back(E);///
//  本方法的问题:WriteData中采用了copy方法切在末尾添加,表内容只增不减
	WriteData(results);
       其实这种方法与windows中ODBC封装的CRecordset感觉蛮像的,一次全部读到内存,映射,优点是操作方便,所有数据都读到了vector中;缺点是当数据表内容过大时耗时过多;

       插入的另一种方式,是用variant_row,代码如下:

	DynamicDBView<> view("example",  "*");
	DynamicDBView<>::insert_iterator write_it = view; //用insert_iterator插入
	variant_row s(view.GetDataObj());
	string str="insert";
	s[0]=  rand()%10;
	s[1]=str; //直接赋值会得到错误
	s[2]=3.3;
	*write_it = s ;
	write_it++;
       STL方法操作db,方便,不过有2个局限性:a.如查找,需要手动的为每一个类写一个函数;b.STL只支持数据的单个index。STL操作,最大的问题在于,只能在数据表后面操作,不能调到view的前端进行操作。


二、IndexDBView类

       IndexDBView的优点,如类介绍:Onemajor difference between the IndexedDBView container and a standard containeris that any changes made to the items in our container can be automaticallypropagated back to the database.任何改写会自动写到数据库(当然,得使用参数BOUND)

        以删除代码为例,代码如下:(更多示范代码直接参考docs/IndexDBView.htm)

		DBConnection::GetDefaultConnection().Connect("DSN=example;UID=sa;"
				"PWD=123;server=127.0.0.1");

		typedef DBView<Example, ParamObjExample> DBV;
		DBV view("example",   BCAExampleObj(),
		   "WHERE INT_VALUE BETWEEN (?) AND (?) OR "
		   "STRING_VALUE = (?)  ORDER BY INT_VALUE",
		  BPAExampleObj());

		IndexedDBView<DBV> indexed_view(
				view,
				"UNIQUE PrimaryIndex; STRING_VALUE; "
				"AlternateIndex; INT_VALUE",
				BOUND,
				USE_ALL_FIELDS,
				cb_ptr_fun(SetParamsExample));


		IndexedDBView<DBV>::iterator idxview_it = indexed_view.begin();// .find(string("new"));

		IndexedDBView<DBV>::iterator deleteMe = idxview_it;  //都是删除相同的一大片啊
		idxview_it++;
		indexed_view.erase(deleteMe);

另外,删除数据后,可能有如下提示:

         Exception type: DBException

         Method: IndexedDBView::erase()

        Error Message:Delete from DB failed! Record may have been changed by another user.

数据库显示正常,应该删除元素后迭代器失效,数据库中内容已经更新。


 两种方法的耗时对比也很明显:

插入单条记录的时间测试效果如下:

 

STL(s)

IndexDBView(us)

10

0

0

100

0

0

1000

1.4

0

10000

2.5

0

删除单条记录耗时如下:

数量级

10

100

1000

5000

10000

用时(us)

0

0

0

0

0


综和比较结果,可以认为:IndexDBView则结合了STL的便利性和SQL语句的效率吧

      下面就是封装它的东东,提供接口给人使用了,刚搞定个连接和读取,sql_iterator什么的,居然有存储过程,想vc6的存储过程我也就写过一个,直接避过吧,先只是个简单的SQL语句算了。

         

       说明下就是,记录情况为本人遇到,仅代表个人观点,如有问题,请留言。

       菜鸟go go go ~~~

《威纶通》 DTL文件 转换成 .xls 或 .csv 文件 直接双击要转换的DTL文件,选择软件包中的.exe程序作为默认程序。往后再次双击DTL文件即可自动生成表格文件在同一文件夹下。 立即下载

相关推荐

DTLplusLauncher(金士顿U盘加密工具)英文安装官方版

DTLplus Launcher是一款由金士顿官方发布的u盘加密工具,使用DTLplus Launcher安装在U盘中提供强大的密码保护,未授权的人无法查看到U盘中的内容,非常的安全,对于U盘里有重要数据的人来说非常的实用,需要此款工具的朋友们可以前来下载使用。 使用方法 首先插入金士顿U盘。 看到系统提示已连接继续下一步操作。 这里设置语言。 设置密码即可。 注意事项

Mysql进阶学习(八)DDL语言+数据类型和DTL语言

DDL(Data Definition Language):数据定义语言主要功能:库和表的管理库的管理表的管理语法: 案例:创建库Books 1.1.2、库的修改 1、对于数据库的修改,一般不用语法修改,会造成一些数据的丢失,可以在本地修改,然后重启服务 2、可以修改数据库的字符集 更改库的字符集 1.1.3、库的删除 1.2、表的管理 1.2.1.表的创建 ★ 语法: 案例1:创建表Book 案例2:创建表author 1.2.2.表的修改 语法 ①修改列名 ②修改列的类型或约束 ③添加新列 ④删

优快云_Admin0的博客 2164

使用SQL Server 2000中的DTS进行DTL的一个简单例子

使用SQL Server 2000中的DTS(数据转换服务)进行DTL的一个简单例子,抽取一个数据库中的部分数据到另一个数据库中。

将DataTable数据导出到Excel文件中(xls)

#region 将DataTable数据导出到Excel文件中(xls)        public static void TableToExcelForXLS(DataTable dt, string file)         ///         /// 将DataTable数据导出到Excel文件中(xls)         ///         /// 要导入的数据表

MeGoodtoo的专栏 1012

dtl:从设计到布局。 在Figma中进行设计,并将其导出为您选择的框架的布局。 或HTML

从设计到版面 这是一个正在进行中的Figma插件,可用于获取页面并将该页面中的顶级框架转换为布局。 这些布局可以是HTML页面,应用程序中的视图,文档中的页面以及许多其他内容。 该插件生成一个中间表示形式,可以通过编写解释器将其转换为目标布局格式。 当前仅支持Vaadin 14 Java项目,但还会有更多目标。 更详细地讲,dtl首先将绝对定位的组件转换为具有适当嵌套的组件树。 然后,使用flexbox复制这些组件的位置。 这将产生一个布局,该布局可在缩放布局时保持元素的正确位置。 最终的布局与设计不是1:1的,但是一个目标是使它尽可能接近。 为此,每个元素都需要在其描述字段中填充其表示的标签(按钮,vaadin-text-field ...)。 要创建布局,需要将组件分组到布局中。 这是通过使用标记为div的组件替代它们来完成的。 每个布局都可以包含垂直或水平放置的组件。 当将来有可

跟着团子学SAP CO:结果分析各评估方法计算逻辑概览 RA Valuation Method Overview KKA1/KKA2/KKA3

在大部分企业财务月结时,结果分析是必不可少的一环,通过结果分析系统可按照设定的评估方法及相关配置自动计算在制品(WIP)、主营业务成本、主营业务收入等等。 在结果分析中最重要的是根据业务需求选择合适的评估方法,目前SAP共提供15种评估方法,今天针对每一种方法计算逻辑及常用的业务场景进行介绍: (1)基于收入的评估方式(带利润实现) Revenue-Based Method with Profit Realization 第一种方式的计算是基于实际收入与计划收入的占比推算应结转的主营业务成本,如果当期累计的

Lucas1211的博客 1万+

c# datatable excel相互转换

/// <summary> /// Excel->DataTable /// </summary> /// <param name="filePath">Excel文件路径</param> public static DataTable ReadExcel(string filePath) { IWorkbook iwkX; ..

wzq1915414095的博客 858

手把手教你配置MCAL中的CAN模块:从基础参数到实战避坑指南

本文提供了一份详尽的MCAL CAN模块配置指南,涵盖从基础参数设置到实战避坑的全过程。文章深入解析了CAN控制器核心参数、硬件对象配置、数据流处理及常见问题排查,并结合源码分析,帮助嵌入式开发者构建稳定高效的CAN通信链路,是汽车电子领域通信开发的实用参考。

weixin_29165465的博客 336

SQL-DML、DQL查询数据

SQL-DML是用于操作数据的语言,可以进行插入、更新和删除数据的操作。它可以通过INSERT、UPDATE和DELETE语句来实现。DQL是用于查询数据的语言,可以通过SELECT语句来实现。使用DQL可以从一个或多个表中检索数据,并可以对数据进行排序、过滤和聚合等操作。通过SQL-DML和DQL语言,可以方便地操作和查询数据库中的数据,为数据分析和应用提供了基础支持。

weixin_50206068的博客 859

Kali Linux实战:用Impacket的secretsdump.py快速提取Windows域控哈希(附避坑指南)

本文详细介绍了如何在Kali Linux中使用Impacket的secretsdump.py脚本快速提取Windows域控哈希,包括环境准备、原理剖析、实战操作及常见问题解决方案。特别适合CTF竞赛和网络信息安全爱好者学习,提升渗透测试效率。

weixin_33670786的博客 409

银河麒麟鲲鹏aarch64架构安装docker和K8s

鲲鹏云服务器上安装docker-云社区-华为云 (huaweicloud.com) 这里我下载的版本是docker-18.09.3.tag docker 安装包地址:https://download.docker.com/linux/static/stable 配置system服务 在github对应分支的contrib/init/systemd/ 下面,提供了对应的docker.service以及docker.socket文件,可以直接拷贝到本地文件使用: 对应链接:https://github.c

qq_50007696的博客 9054

DCL(数据控制语言)、DTL(事务控制语言)和mysql编程

DCL 简介:很多时候一个数据库需要多人进行控制和操作,这时就需要使用数据控制语言来创建账户以及分配可使用权限,可见该语言主要涉及2个问题: 用户管理 权限分配 mysql中的权限 首先理解什么是权限,简单来说就是可执行的操作,在mysql中主要用某种字段的开或者关来表示是否有某种权限,权限名如:’select’, ‘update’,大约有30个。 主要权限如下: mysql中的用...

su_yi_song的博客 1753

VSCode 1.85便携版安装与配置:解决远程服务器glibc版本过低报错的保姆级指南

本文详细介绍了如何通过VSCode 1.85便携版解决远程服务器glibc版本过低导致的兼容性问题。通过环境隔离和版本固化的方法,开发者可以在老旧服务器上稳定运行Remote-SSH插件,同时保留主力VSCode的配置。文章提供了从下载安装到深度配置的完整指南,帮助用户快速搭建稳定的开发环境。

weixin_30279315的博客 575

DDL、DML、DQL、DCL、DTL MySQL常用语法大全

一 、常用操作数据库和数据表结构的命令(DDL) 二、修改表的命令(DML) 三、对数据的操作(DML,DQL) 四、多表联合查询 五、DCL 数据控制语言 六、DTL 数据事务语言 七、最常用关系语法 八、时间查询......

Sion.Z 1102

【已解决,极简单!!】求助,R语言读取csv文件各种报错

【已解决】本来之前没问题,今天更新了Rstudioh以及R,就各种报错了。也看了目前能读取到的文件,从第一个中文字符直接就没有了。也就是说 还是读取中文字符的问题?新人初学,求大佬轻喷!

youyouluming945的博客 3876

YOLOv8的二次创新 | 结合iRMB与EMA打造全新的iEMA机制,提升动态检测性能【附保姆级代码】

YOLOv8继承了YOLO系列的轻量化和高效检测特性,同时通过改进的架构设计使得其在实时场景下具有更高的检测精度。然而,随着检测需求的增加,尤其是在动态目标检测和长时间序列检测中,YOLOv8的鲁棒性依然可以提升。通过iEMA机制的引入,我们将在这些方面进行进一步优化。iRMB模块是我们对传统Residual Block的进一步改进。通过多层特征提取,iRMB能够捕捉更多层次的特征信息,并通过引入轻量化的残差结构,提升计算效率。

一键难忘的博客 3085

MySQL(二) DDL、DML、DQL、DTL概述

在SQL语言中,共有四种类型:DDL(数据定义语言)、DML(数据操纵语言)、DQL(数据查询语言)、DCL(数据控制语言).以下,将对其各部分进行一一概述. 1.DDL(Data Definition Language) 主要内容:对数据库/表创建、修改、删除操作 数据库创建:create database 数据库名; 数据表创建:create table 数据表名(字段1 字段类型,字段2 字...

shine4869的博客 2314

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

SQL: DDL,DML,DCL,DTL,TCL,

Structured Query Language,结构化查询语言, 是一种用于管理和操作关系数据库的标准编程语言。DQL(Data Query Language):数据查询语言DDL(Data Definition Language):数据定义语言DML(Data Manipulation Language):数据操纵语言DCL(Data Control Language):数据控制语言DTL(Data Transaction Language):数据事务语言 TCL(Transaction Contro

weixin_40121264的博客 824

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

数据库数据类型、常见约束、系统结构的基本知识总结(SQL、DML、DQL、DCL、DTL)

1.数据库的基本知识 1.数据库理解:持久化保存数据的程序或者软件 2.java中用于保存数据的技术 1.变量 2.对象 3.数组 4.集合 5.IO流操作 总结:1、2、3、4将数据保存内存中,易失性,无法持久化保存。5可以实现持久保存,数据的操作不灵活,数据库既可以持久化保存数据,还能灵活的操作 3.数据库的特点: 1.持久化操作 2.保存数据有组织,有结构 3.表的形式保...

黑某人 803

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

MySQL 数据学习笔记速查表(DDL、DML、DQL、DCL、DTL)

利用MySQL的DDL创建结构,DML实现增删改查,DQL挖掘数据价值,DCL管理权限,DTL助力数据转换,您将轻松驾驭数据库世界。高效、安全、灵活,MySQL助您释放数据潜能,驱动业务创新,成就无限可能!

weixin_54217348的博客 2240

SQL语言分类DQL,DML,DDL,DCL,DTL

SQL语言共分为五大类:         数据查询语言DQL         数据操纵语言DML         数据定义语言DDL         数据控制语言DCL         数据事物语言DTL DQL 数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块:   SELECT <字段名表>FROM <表或视图...

weixin_30888707的博客 249

数据库博客-DTL事务-权限

事务 transaction DDL、DML、DCL、DTL 概念:一组必须同时成功或者失败的DML语句构成了一个事务 ~insert / ~delete / ~update /select 特性:ACID Atomicity : 原子性 : 操作不可分 Consistency : 一致性: 操作发生前和发生后,数据的状态都必须一致 Isolation : 隔离性: ...

m0_37121708的博客 260

Phoenix的快速入门

1Phoenix的快速入门 案例:创建一个订单明细表,名为ORDER_DTL,字段如下: 1.1 创建表 基本语法: CREATE TABLE IF NOT EXISTS 表名 ( ROWKEY名称 数据类型 PRIMARY KEY 列蔟名.列名1 数据类型 NOT NULL, 列蔟名.列名2 数据类型 NOT NULL, 列蔟名.列名3 数据类型); 订单明细表创表语句: 大写: create table if not exists ORDER_DTL( ID varchar pr

m0_46689661的博客 2919

数据库的那些操作需要用到commit(需要用到事务)

SQL语言分为五大类: DDL(数据定义语言) - Create、Alter、Drop 这些语句自动提交,无需用Commit提交。 DQL(数据查询语言) - Select 查询语句不存在提交问题。DML(数据操纵语言) - Insert、Update、Delete 这些语句需要Commit才能提交。 DTL(事务控制语言) - Commit、Rollback 事务提交与回滚语句。 DCL(数据控...

qq_39126966的博客 1万+

数据库基本管理

数据库基本管理 1.数据库操作基本流程 ✓ 连接登陆数据库 ✓ 创建数据库 ✓ 创建数据表 ✓ 插入数据记录 ✓ 断开连接 连接 MySQL 的方法:命令行、Web 网页、安装图形软件、编写脚本(PHP、java…) 连接MySQL数据库的命令语法格式: [root@mysql50 ~]# mysql [-h服务器IP或域名 - u用户名 -p密码 数据库名称] quit 或者 exit...

weixin_44793145的博客 178
上一篇: specialization of template.... in different namespace的解决
下一篇: Argument of type '(Foo::)(int,int)' does not match 'void (*)(int,int)'以及静态函数问题
coder_xia
博客等级 码龄17年 151粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值