天道酬勤,学无止境

04rapidJson学习之往doc根对象插入数组,并在数组中插入对象案例

04rapidJson学习之往doc根对象插入数组,并在数组中插入对象案例

概述:
上两篇我们已经讲了数组和对象的创建和遍历,下面我们使用个案例巩固一下,并且这个案例也是项目中用得比较多的方法。

1 代码

//往数组中插入对象.一般使用多个函数组成json时,都是从最小单位开始组建
//注意:这里并非是返回数组,只是开一个函数处理数组的引用而已。防止某个函数过长
void InsertObjInDoc(Document &doc, Value &array, std::string camera_uid, std::string message) {
	doc.SetObject();//实际上在test04已经设置了,但无妨
	Document::AllocatorType &a = doc.GetAllocator();

	//创建临时对象,循环放进数组中
	for (auto i = 0; i < 5; i++) {
		Value o1(kObjectType);
		//一般需求时不需要这个临时数组,因为参3(参4)直接是不断变化的,这里只是模拟变化
		char tmp1[50] = { 0 };
		sprintf_s(tmp1, "%s_%d", camera_uid.c_str(), i);

		//先往对象插入数据
		Value v1(tmp1, a);
		Value v2(message.c_str(), a);
		Value v3(i);
		o1.AddMember("camera_uid", v1, a);
		o1.AddMember("message", v2, a);
		o1.AddMember("status", v3, a);

		//将每一次的对象数据放进数组
		array.PushBack(o1, a);
	}

}

//往根对象插入数组
void InsertArrayInDoc(Document &doc, Value &array) {

	doc.AddMember("data", array, doc.GetAllocator());
	doc.AddMember("status", 0, doc.GetAllocator());//一般是总状态
}


//在doc根对象中插入数组,然后在数组中又插入普通对象
void test04() {
	Document doc;
	doc.SetObject();
	Value a1(kArrayType);

	//1 首先将对象插入数组
	InsertObjInDoc(doc, a1, "cid", "OK");
	//2 将添加数据后的数组插入到根对象
	InsertArrayInDoc(doc, a1);

	//3 打印,该函数在前一篇有,很简单,不复制了
	std::string str = GetStrWithDoc(doc);

	std::cout << str.c_str() << std::endl;
}

int main() {

	//test01();

	//test02();

	test04();

	return 0;
}

上面结果为:
在这里插入图片描述
为了方便大家观看,列出如下:
在这里插入图片描述

2 总结
好了,上面一般就是我们项目中常用的案例,如果需要更加复杂的,只需要在数组或者数组里面的对象处理即可。方法是一样的,但是需要注意设置下面的这些内容。

	doc.SetObject();
	Value a1(kArrayType);

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • PHP进阶学习之垃圾回收机制详解
    一、概念 垃圾回收机制是一种动态存储分配的方案。它会自动释放程序不再需要的已分配的内存块。垃圾回收机制可以让程序员不必过分关心程序内存分配,从而将更多的精力投入到业务逻辑。 在现在的流行各种语言当中,垃圾回收机制是新一代语言所共有的特征,如Python、PHP、C#、Ruby等都使用了垃圾回收机制。 二、PHP垃圾回收机制 1、在PHP5.3版本之前,使用的垃圾回收机制是单纯的“引用计数”。即: ①每个内存对象都分配一个计数器,当内存对象被变量引用时,计数器+1; ②当变量引用撤掉后(执行unset()后),计数器-1; ③当计数器=0时,表明内存对象没有被使用,该内存对象则进行销毁,垃圾回收完成。 并且PHP在一个生命周期结束后就会释放此进程/线程所占的内容,这种方式决定了PHP在前期不需要过多考虑内存的泄露问题。 但是当两个或多个对象互相引用形成环状后,内存对象的计数器则不会消减为0;这时候,这一组内存对象已经没用了,但是不能回收,从而导致内存泄露的现象。 php5.3开始,使用了新的垃圾回收机制,在引用计数基础上,实现了一种复杂的算法,来检测内存对象中引用环的存在,以避免内存泄露。 2、随着PHP的发展,PHP开发者的增加以及其所承载的业务范围的扩大,在PHP5.3中引入了更加完善的垃圾回收机制,新的垃圾回收机制解决了无法处理循环的引用内存泄漏问题。 如官方文档所说
  • numpy学习之三:数组操作
    NumPy 迭代数组 NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式。 迭代器最基本的任务的可以完成对数组元素的访问。 接下来我们使用 arange() 函数创建一个 2X3 数组,并使用 nditer 对它进行迭代。 控制遍历顺序 for x in np.nditer(a, order=‘F’):Fortran order,即是列序优先; for x in np.nditer(a.T, order=‘C’):C order,即是行序优先; 修改数组中元素的值 nditer 对象有另一个可选参数 op_flags。 默认情况下,nditer 将视待迭代遍历的数组为只读对象(read-only),为了在遍历数组的同时,实现对数组元素值得修改,必须指定 read-write 或者 write-only 的模式。 Numpy 数组操作 numpy.reshape numpy.reshape 函数可以在不改变数据的条件下修改形状,格式如下: numpy.reshape(arr, newshape, order=‘C’) arr:要修改形状的数组 newshape:整数或者整数数组,新的形状应当兼容原有形状 order:‘C’ – 按行,‘F’ – 按列,‘A’ – 原顺序,‘k’ – 元素在内存中的出现顺序。 numpy.ndarray
  • 计算机二级office学习之Excel操作题考点整理
    考点1 页面设置 页面布局-页边距、纸张方向、纸张大小、打印区域、页面背景、打印标题、页眉页脚、缩印 页面布局-选中打印区域-打印标题-顶端标题行-选中第二行 考点2 获取外部数据和删除重复值 1、获取外部数据 1.1 自网页 右击文件-打开方式为IE浏览器(360可能有乱码)-复制地址 打开excel-选中A1单元格-数据-自网站-删除原地址并粘贴刚刚复制的地址-转到-下拉找到表格勾选上去-导入-确定 注:实际应用中:导入时属性里可刷新数据 1.2 自文本 数据-自文本-选择对应文件-分隔符号或固定宽度,简体中文-下一步下一步-设置“身份证号码”列为文本 学号姓名合并第一列了:在第2列前插入空白列-选中A列-分列-固定宽度-下一步… 2、删除重复值 选中对应列-数据-删除重复项-勾选按什么重复 考点3 工作表和单元格 1、工作表:单击右键即可解决 2、单元格:单元格格式只改变表现形式,数据不变 CTRL+Shift+方向键的下=连续向下选择 [<15]干旱;[<100]适中;多雨 aaaa:星期N;ddd 英文 考点4 图表 选中-插入-折线图柱形图等-布局、右键-设置数据系列格式……等操作 选中插入迷你图的区域-插入迷你图-选中数据 考点5 套用表格格式 考点6 条件格式 把符合特定条件的数据设置格式突出显示 1、突出显示单元格规则(大于、小于、介于、重复值、大于等于) 2
  • JVM学习之对象的实例化、内存布局与访问定位
    目录 背景 对象实例化 对象实例化的几种方式 字节码角度查看对象创建过程 对象实例化的步骤 对象的内存布局 对象的访问定位 背景 上周跟着做尚硅谷的电商数仓,好悬把我写吐了,JVM学习笔记因此一直没有更新,现在补上.. 对象实例化 对象实例化的几种方式 1)、new 2)、Class.newInstance() 3)、Constructor的newInstance() 4)、clone() 5)、反序列化 6)、第三方库Objenesis 字节码角度查看对象创建过程 代码Object o = new Object()对应的字节码如下 0: new #4 // class java/lang/Object 3: dup 4: invokespecial #1 // Method java/lang/Object."<init>":()V 7: astore_1 8: return 字节码中,new操作符加载Object类到方法区并在堆的伊甸园区创建对象,然后进行零值初始化 dup表示复制,把堆中对象复制一份到操作数栈中 invokespecial表示调用自身的方法,也就是Object的构造方法,可以对属性进行显式初始化 astore_1是把操作数栈中的对象引用弹出到局部变量表,下标为1的位置中 对象实例化的步骤 1)、判断对象对应的类是否加载、链接、初始化 JVM遇到一条new指令
  • C++学习之数组的插入删除算法
    数组的插入和删除算法之前必须要先将数组排序,这里采用的是冒牌排序 冒泡排序 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 C\C++代码: 在将数组排完序之后就可以进行插入操作了 插入算法 将数据元素a插入到顺序表下表为i的位置 1、下标为i及下标为i以后的所有元素后移 2、下标i的位置放入数组元素a 3、顺序表的长度加1删除算法将第i个数据元素从顺序表中删除1、找到第i个位置的数据元素2、将第i个数据元素以后的数据元素一次覆盖前一个位置 3、顺序表的长度减1 代码: #include using namespace std; int main(){ int num[10]; int index=0; //需要插入位置的下标 int count=0; //数组的长度 int insertNum; //需要插入的数值 int temp=0; num[count++]=2; num[count++]=45; num[count++]=1; num[count++]=10; //冒泡排序 for (int i = 0; i < count; i++) { for (int j = 0; j < count-i-1; j++) { if (num[j+1]<num[j]
  • Python学习之数据分析库一(Numpy入门)
    目录 一、关于Numpy 1.什么是Numpy? 2.Numpy的优势 二、Numpy安装 三、Numpy的简单应用 1.Numpy创建数组 2.矩阵的转置 3.Numpy的索引和片 4.Numpy中数值的修改 5.获取矩阵的四角元素 6、数组形状的修改 7、数组拼接 8、数组分割 9、数组元素的添加和删除 10、numpy的统计函数 二、案例一(Numpy学生身高体重统计分析) 三、案例二(基于Numpy的股价统计分析和应用) 一、关于Numpy 1.什么是Numpy? NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。 NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。 总之,NumPy 是一个运行速度非常快的数学库,主要用于数组计算,主要包含:
  • 数据结构学习之-插入排序
    一、插入排序的概念 插入排序,一般也被称为直接插入排序(Straight Insertion Sort)。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。 二、示例图 如图所示,为了防止数组越界的情况产生,我们在数组下标为0 的位置设置监视哨。 三、伪码表示 void InsertSort(SqList &L){ //对顺序表L作直接插入排序 for(i=2;i<L.lenget;++i){ if(LT(L.r[i].key,L.r[i-1].key)){//“<” ,需要讲L.r[i]插入有序字表 L.r[0] = L.r[i]; //复制为哨兵 L.r[i] = L.r[i-1]; for(j=i-2;LT(L.r[0].key ,L.r[j].key);--j){ L.r[j+1] =L.r[j];//记录后移 L.r[j+1] =L.r[0]; //插入到正确位置 } } } }//InsertSort 四、Java代码实现 public class InsertionSort { public static void main
  • java学习之--- 掌握HashMap
    最近几天,一直在学习 HashMap 的底层实现,发现关于 HashMap 实现的博客文章还是很多的,对比了一些,都没有一个很全面的文章来做总结,本篇文章也断断续续结合源码写了一下,如果有理解不当之处,欢迎指正! Map结构先上图 在程序编程的时候,HashMap 是一个使用非常频繁的容器类,它允许键值都放入 null 元素。除该类方法未实现同步外,其余跟 Hashtable 大致相同,但跟 TreeMap 不同,该容器不保证元素顺序,根据需要该容器可能会对元素重新哈希,元素的顺序也会被重新打散,因此不同时间迭代同一个 HashMap 的顺序可能会不同。 HashMap 容器,实质还是一个哈希数组结构,但是在元素插入的时候,存在发生 hash 冲突的可能性; 在 jdk1.7 中,HashMap 主要是由数组+链表组成,当发生 hash 冲突的时候,就将冲突的元素放入链表中。 从 jdk1.8 开始,HashMap 主要是由数组+链表+红黑树实现的,相比 jdk1.7 而言,多了一个红黑树实现。当链表长度超过 8 的时候,就将链表变成红黑树,如图所示。 打开HashMap的源码之前,我们先温故一下基础知识; 第一部分:基础入门 HashMap数据结构均有数组+链表; 数组的结构 数组结构的特点是:是将元素在内存中连续存储的;它的优点:因为数据是连续存储的,内存地址连续
  • 深度学习之numpy库使用
    1.通过reshape(FN,-1)将参数指定为-1,这是reshape的一个便利的功能。通过在reshape时指定为-1,reshape函数会自动计算-1维度上的元素个数,以使多维数组的元素个数前后一致。比如,(10, 3, 5, 5)形状的数组的元素个数共有750个,指定reshape(10,-1)后,就会转换成(10, 75)形状的数组。 2.NumPy的transpose函数。transpose会更改多维数组的轴的顺序。如图7-20所示,通过指定从0开始的索引(编号)序列,就可以更改轴的顺序。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210330095405205.png) 3.最大值的计算可以使用 NumPy 的 np.max方法。np.max可以指定axis参数,并在这个参数指定的各个轴方向上求最大值。比如,如果写成np.max(x, axis=1),就可以在输入x的第1维的各个轴方向上求最大值。 来源:https://blog.csdn.net/weixin_44229976/article/details/115318018
  • Lists、ArrayLists、Maps、Hashmaps、Collections 等之间有什么区别?(What is the difference between Lists, ArrayLists, Maps, Hashmaps, Collections etc..?)
    问题 自从我重新开始用 Java 编程以来,我一直在使用 HashMaps,但并没有真正理解这些集合。 老实说,我不确定一直使用 HashMaps 是否最适合我或生产代码。 到目前为止,只要我能够以我在 PHP 中调用它们的方式获取我需要的数据(是的,我承认您现在正在考虑的任何负面事情),其中$this_is_array['this_is_a_string_index']为调用变量数组提供了很多便利。 所以现在,我已经使用 java 超过 3 个月了,遇到了我上面指定的接口,想知道为什么有这么多这些东西(更不用说,vectors,abstractList {哦,这个列表还在继续...... .})? 我的意思是他们有什么不同? 更重要的是,在我的情况下使用的最佳界面是什么? 回答1 API 非常清楚它们之间的差异和/或关系: 收藏 集合层次结构中的根接口。 一个集合代表一组对象,称为它的元素。 一些集合允许重复元素,而另一些则不允许。 有些是有序的,有些是无序的。 http://download.oracle.com/javase/6/docs/api/java/util/Collection.html 列表 有序集合(也称为序列)。 此界面的用户可以精确控制每个元素在列表中的插入位置。 用户可以通过它们的整数索引(在列表中的位置)访问元素,并在列表中搜索元素。 http:/
  • Vue源码学习之snabbdom分析
    Vue源码学习之snabbdom 虚拟Dom源码分析流程 文章内容输出来源:拉勾教育大前端高薪训练营 在拉钩训练营学习已经有一段时间了,感觉这段时间的收获远比自己独自学习强的多,自己学习的时候经常会因为惰性,无法坚持,在这里有班主任时刻关注你的学习进度(感觉对我这种懒人蛮好的),最重要的是有了一个学习的计划,不用无头苍蝇一样东一点西一点,最后什么都没记住。学习都是需要方法和技巧的,在训练营会有专业的老师为你答疑解惑,同时会教你解决问题的思路及方法,让你能够触类旁通。 Vue的源码中其虚拟dom部分主要是 借鉴了snabbdom.js,而snabbdom的代码行数比较少,可以帮助我们更好的理解相关概念,所以这里我们对snabbdom进行学习。 虚拟Dom vNode实际上只是一个js对象,使用普通js对象来描述dom对象,因为不是真实dom所有叫虚拟dom(创建一个真实Dom的成本非常高,属性非常多),通过新旧虚拟DOM 这两个对象的差异(Diff算法),最终只把变化的部分重新渲染,提高渲染效率的过程; diff 是通过JS层面的计算,返回一个patch对象,即补丁对象,在通过特定的操作解析patch对象,完成页面的重新渲染 export interface VNode { sel: string | undefined; //选择器 data: VNodeData |
  • 最详细的Java知识点--List、Set、Collections
    List、Set、数据结构、Collections主要内容数据结构List集合Set集合Collections目标能够说出List集合特点能够说出常见的数据结构能够说出数组结构特点能够说出栈结构特点能够说出队列结构特点能够说出单向链表结构特点能够说出Set集合的特点能够说出哈希表的特点使用HashSet集合存储自定义元素能够说出可变参数的格式能够使用集合工具类能够使用Comparator比较器进行排序第一章 数据结构2.1 数据结构有什么用?当你用着java里面的容器类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,也好像链表之类的。好用吗?好用,这就是数据结构的用处,只不过你在不知不觉中使用了。现实世界的存储,我们使用的工具和建模。每种数据结构有自己的优点和缺点,想想如果Google的数据用的是数组的存储,我们还能方便地查询到所需要的数据吗?而算法,在这么多的数据中如何做到最快的插入,查找,删除,也是在追求更快。我们java是面向对象的语言,就好似自动档轿车,C语言好似手动档吉普。数据结构呢?是变速箱的工作原理。你完全可以不知道变速箱怎样工作,就把自动档的车子从 A点 开到 B点,而且未必就比懂得的人慢。写程序这件事,和开车一样,经验可以起到很大作用,但如果你不知道底层是怎么工作的,就永远只能开车,既不会修车,也不能造车。当然了,数据结构内容比较多
  • Java学习之:对象数组的创建和使用
    文章目录 什么是对象数组对象数组实例 什么是对象数组 对于一个普通的数组来说: 这里使用 int 创建了一个数组,存放 int 类型的数据 顾名思义,如果我们 使用一个对象类型创建的数组全部用来存放这类的对象,那么这种数组就叫做对象数组。 对象数组实例 【定义一个 Person 标准类】 public class Person { private int age; private String name; public Person(int age, String name) { this.age = age; this.name = name; } public Person() { } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 【使用 Person 标准类创建对象数组】 通过这样的方式就可以创建用来存放对象的对象数组啦~但是数组存在一个 缺点:一旦创建,程序运行期间长度不可以发生改变。解决方法:使用 ArrayList 集合类;这部分内容会在后面的文章中给出
  • HashMap在Jdk1.7和1.8中的实现
    文章目录 一、初窥HashMap二、jdk1.7中HashMap的实现三、jdk1.8中HashMap的实现四、分析Hashtable、HashMap、TreeMap的区别 Java集合类的源码是深入学习Java非常好的素材,源码里很多优雅的写法和思路,会让人叹为观止。HashMap的源码尤为经典,是非常值得去深入研究的,jdk1.8中HashMap发生了比较大的变化,这方面的东西也是各个公司高频的考点。网上也有很多应对面试的标准答案,我之前也写过类似的面试技巧,应付一般的面试应该是够了,但个人觉得这还是远远不够,毕竟我们不能只苟且于得到offer,更应去勇敢的追求诗和远方(源码)。 jdk版本目前更新的相对频繁,好多小伙伴说jdk1.7才刚真正弄明白,1.8就出现了,1.8还用都没开始用,更高的jdk版本就又发布了。很多小伙伴大声疾呼:臣妾真的学不动啦!这也许就是技术的最大魅力吧,活到老学到老,没有人能说精通所有技术。不管jdk版本如何更新,目前jdk1.7和1.8还是各个公司的主力版本。不管是否学得动,难道各位小伙伴忘记了《倚天屠龙记》里九阳真经里的口诀:他强由他强,清风拂山岗;他横由他横,明月照大江。他自狠来他自恶,我自一口真气足。(原谅我插入广告缅怀金庸大师,年少时期读的最多的书就是金庸大师的,遍布侠骨柔情大义啊)。这里的“真气”就是先掌握好jdk1.7和1.8
  • 前端必经之路:你所要了解的数据结构
    数据结构是计算机存储、组织数据的方式,它是相互之间存在一种或多种特定关系的数据元素的集合。数据结构往往同高效的检索算法和索引技术有关,通常情况下,精心选择的数据结构可以带来更高的运行或存储效率。 数据结构包含三个方面:数据元素之间的逻辑关系(即数据的逻辑结构)、数据元素及其关系在计算机中的存储方式(数据的物理结构或存储结构)以及施加在数据上的操作(数据的运算)。 所有能被输入到计算机中,且能被计算机处理的符号的集合,称为数据。数据是计算机操作对象的总称。数据与数据之间的联系被称为数据的逻辑结构 ,根据关系的紧密程度,逻辑结构被分为四种:集合、线性结构、树形结构和图形结构。 集合表示数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系。线性结构表示数据结构中的元素存在一对一的相互关系。树形结构表示数据结构中的元素存在一对多的相互关系。而图形结构表示数据结构中的元素存在多对多的相互关系。 上面四种数据的逻辑结构在计算机存储空间的存放形式(映像)被称为数据的物理结构。物理结构分为顺序存储结构、链式存储结构、数据索引存储结构和数据散列存储结构。 顺序存储结构:把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。在计算机中用一组地址连续的存储单元依次存储线性表的各个数据元素,称作线性表的顺序存储结构。顺序存储结构可随机存取表中数据
  • Java数据结构
    1数组 2链表 3栈和队列 4二叉树 5堆和堆栈 6散列表 7红黑树 1. 数组 数组是一种连续存储线性结构,元素类型相同,大小相等,数组是多维的,通过使用整型索引值来访问他们的元素,数组尺寸不能改变。 数组的优点: 存取速度快数组的缺点: 事先必须知道数组的长度 插入删除元素很慢 空间通常是有限制的 需要大块连续的内存块 插入删除元素的效率很低 2. 链表 n个节点离散分配,彼此通过指针相连,每个节点只有一个前驱节点,每个节点只有一个后续节点,首节点没有前驱节点,尾节点没有后续节点。 确定一个链表我们只需要头指针,通过头指针就可以把整个链表都能推出来。 链表 链表优点 空间没有限制 插入删除元素很快链表缺点 存取速度很慢 链表又细分了3类: 单向链表 一个节点指向下一个节点。双向链表 一个节点有两个指针域。循环链表 能通过任何一个节点找到其他所有的节点,将两种(双向/单向)链表的最后一个结点指向第一个结点从而实现循环。 操作链表要时刻记住的是:节点中指针域指向的就是另一个节点! Java实现链表 首先,我们定义一个类作为节点,节点需要有两个属性: 数据域 指针域 public class Node { //数据域 public int data; //指针域,指向下一个节点 public Node next; public Node() { } public Node(int
  • 数据库学习之-JDBC和XML的学习笔记
    JDBC和XML的学习 JDBCJDBC的概述SQL注入问题预处理对象JDBC 控制事务 数据库连接池和DBUtils数据库连接池DBUtils工具类DBUtils完成 CRUD 数据库批处理MySql元数据 XMLXML基本介绍XML的语法XML约束XML 解析 JDBC JDBC的概述 JDBC(Java Data Base Connectivity) 是 Java 访问数据库的标准规范.是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。是Java访问数据库的标准规范。 JDBC是接口,驱动是接口的实现,没有驱动将无法完成数据库连接,从而不能操作数据库!每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生成厂商提供。 JDBC就是由sun公司定义的一套操作所有关系型数据库的规则(接口),而数据库厂商需要实现这套接口,提供数据库驱动jar包, 我们可以使用这套接口编程,真正执行的代码是对应驱动包中的实现类。 API的使用:注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); 获得链接 : 获取连接的静态方法说明Connection getConnection(String url, String user, String
  • 数据库学习之-JDBC和XML的学习笔记
    JDBC和XML的学习 JDBCJDBC的概述SQL注入问题预处理对象JDBC 控制事务 数据库连接池和DBUtils数据库连接池DBUtils工具类DBUtils完成 CRUD 数据库批处理MySql元数据 XMLXML基本介绍XML的语法XML约束XML 解析 JDBC JDBC的概述 JDBC(Java Data Base Connectivity) 是 Java 访问数据库的标准规范.是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。是Java访问数据库的标准规范。 JDBC是接口,驱动是接口的实现,没有驱动将无法完成数据库连接,从而不能操作数据库!每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生成厂商提供。 JDBC就是由sun公司定义的一套操作所有关系型数据库的规则(接口),而数据库厂商需要实现这套接口,提供数据库驱动jar包, 我们可以使用这套接口编程,真正执行的代码是对应驱动包中的实现类。 API的使用:注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); 获得链接 : 获取连接的静态方法说明Connection getConnection(String url, String user, String
  • c++学习之字符串向量与数组
    title: c++学习之字符串向量与数组 date: 2020-07-08 14:00:00 categories: 分类 index_img: /img/articles/vim.jpg tags: - 标签1 - 标签2 本文对《Primer C++》中的字符串、向量与数组的零碎知识点进行记录与梳理 字符串、向量与数组 命令空间的using声明 头文件不应该包含using声明,因为头文件的内容会被拷贝到所应用头文件的源文件中,如果头文件包含using声明,则每个引用该头文件的源文件都会有此using声明,可能会带来意想不到的命名冲突。 标准库类型string 对于string的size函数,返回值的类型为string::size_type,这个类型体现了与机器无关的特性。该类型是无符号类型的值,能够放下任何string对象的大小。注意若表达式中有size函数,在该表达式中就不要使用int类型,防止无符号类型与有符号类型的混用导致的莫名其妙的错误。字符串string对象与字符串字面值相加时,必须确保每个加号(+)的两侧运算对象至少有一个是string。需要注意:字符串字面值与string是不同的类型。比如: string s1 = "world"; string s2 = "hello" + ", " + s1; //error: +号两侧的运算对象至少有一个是string /
  • 大数据笔记10—java基础篇6(集合)
    集合 集合一、迭代器<iterator>案例一 二、并发修改异常三、Collection集合案例一(Collection练习)案例二(Collection接口) 总结: 集合的使用步骤案例三(collection遍历) 四、List集合4.1 案例一(迭代器)4.2、List集合特有的成员方法4.2.1案例二(List遍历)4.2.2 案例三(List遍历) 五、并发修改异常六、增强for循环案例三: 遍历集合 七、ArrayList集合八、LinkedList集合8.1 LinkedList的特有方法 例题 苟有恒,何必三更眠五更起; 最无益,莫过一日曝十日寒。 集合 集合的长度是可变的,是用来存储多个同类型的容器 集合的顶层都是接口, 其中Collection接口是单列集合的顶层接口, Map接口是双列集合的顶层接口 体系图 我们采用学顶层,用底层的方式进行学习 解释: 因为顶层封装的是整个继承体系的共性内容, 而底层才是具体的实现, 体现 (子类继承父类,父类有所有的方法,用接口的形式进行调用比较方便.) 集合有两大子体系: list体系特点:有序,可重复 set体系的特点:无序,唯一 一、迭代器<iterator> public Iterator<E> iterator() //根据集合对象, 获取其对应的迭代器对象. 解释: 因为Iterator是接口