㈠ xutils 中两张表之间的双向关系怎么实现
公共基础知识大纲公共基础知识基本要求1.掌握算法的基本概念。2.掌握基本数据结构及其操作。3.掌握基本排序和查找算法。4.掌握逐步求精的结构化程序设计方法。5.掌握软件工程的基本方法,具有初步应用相关技术进行软件开发的能力。6.掌握数据库的基本知识,了解关系数据库的设计。考试内容一、基本数据结构与算法1.算法的基本概念;算法复杂度的概念和意义(时间复杂度与空间复杂度)。2.数据结构的定义;数据的逻辑结构与存储结构;数据结构的图形表示;线性结构与非线性结构的概念。3.线性表的定义;线性表的顺序存储结构及其插入与删除运算。4.栈和队列的定义;栈和队列的顺序存储结构及其基本运算。5.线性单链表、双向链表与循环链表的结构及其基本运算。6.树的基本概念;二叉树的定义及其存储结构;二叉树的前序、中序和后序遍历。7.顺序查找与二分法查找算法;基本排序算法(交换类排序,选择类排序,插入类排序)。二、程序设计基础1.程序设计方法与风格。2.结构化程序设计。3.面向对象的程序设计方法,对象,方法,属性及继承与多态性。三、软件工程基础1.软件工程基本概念,软件生命周期概念,软件工具与软件开发环境。2.结构化分析方法,数据流图,数据字典,软件需求规格说明书。3.结构化设计方法,总体设计与详细设计。4.软件测试的方法,白盒测试与黑盒测试,测试用例设计,软件测试的实施,单元测试、集成测试和系统测试。5.程序的调试,静态调试与动态调试。四、数据库设计基础1.数据库的基本概念:数据库,数据库管理系统,数据库系统。2.数据模型,实体联系模型及E-R图,从E-R图导出关系数据模型。3.关系代数运算,包括集合运算及选择、投影、连接运算,数据库规范化理论。4.数据库设计方法和步骤:需求分析、概念设计、逻辑设计和物理设计的相关策略。考试方式公共基础知识有10道选择题和5道填空题共三十分。2004年新版NCRE二级c语言程序设计考试大纲本大纲适用于05年考试公共基础知识基本要求1.熟悉TURBOC集成环境。2.熟练掌握结构化程序设计的方法,具有良好的程序设计风格。3.掌握程序设计中简单的数据结构和算法。4.TURBOC的集成环境下,能够编写简单的C程序,并具有基本的纠错和调试程序的能力。考试内容一、C语言的结构1.程序的构成,MAIN函数和其他函数。2.头文件,数据说明,函数的开始和结束标志。3.源程序的书写格式。4.C语言的风格。二、数据类型及其运算1.C的数据类型(基本类型、构造类型、指针类型、空类型)及其定义方法。2.C运算符的种类、运算优先级和结合性。3.不同类型数据间的转换与运算。4.C表达式类型(赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式)和求值规则。三、基本语句1.表达式语句,空语句,复合语句。2.数据的输入与输出,输入输出函数的调用。3.复合语句。4.GOTO语句和语句标号的使用。四、选择结构程序设计1.用IF语句实现选择结构。2.用SWITCH语句实现多分支选择结构。3.选择结构的嵌套。五、循环结构程序设计1.FOR循环结构。2.WHILE和DOWHILE循环结构。3.CONTINUE语句和BREAK语句。4.循环的嵌套。六、数组的定义和引用1.一维数组和多维数组的定义、初始化和引用。2.字符串与字符数组。七、函数1.库函数的正确调用。2.函数的定义方法。3..函数的类型和返回值。4.形式参数与实在参数,参数值的传递。5.函数的正确调用,嵌套调用,递归调用。6.局部变量和全局变量。7.变量的存储类别(自动,静态,寄存器,外部),变量的作用域和生存期。8.内部函数与外部函数。八、编译预处理1.宏定义:不带参数的宏定义;带参数的宏定义。2.“文件包含”处理。九、指针1.指针与指针变量的概念,指针与地址运算符。2.变量、数组、字符串、函数、结构体的指针以及指向变量、数组、字符串、函数、结构体的指针变量。通过指针引用以上各类型数据。3.用指针作函数参数。4.返回指针值的指针函数。5.指针数组,指向指针的指针,MAIN函数的命令行参数。十、结构体(即“结构”)与共用体(即“联合”)1.结构体和共用体类型数据的定义方法和引用方法。2.用指针和结构体构成链表,单向链表的建立、输出、删除与插入。十一、位运算1.位运算符的含义及使用。2.简单的位运算。十二、文件操作只要求缓冲文件系统(即高级磁盘I/O系统),对非标准缓冲文件系统(即低级磁盘I/O系统)不要求。1.文件类型指针(FILE类型指针)。2.文件的打开与关闭(FOPEN,FCLOSE)。3.文件的读写(FPUTC,FGETC,FPUTS,FGETS,FREAD,FWRITE,FPRINTF,FSCANF函数),文件的定位(REWIND,FSEEK函数)。考试方式1.笔试:120分钟,满分100分,其中含公共基础知识部分的30分。2.上机:60分钟,满分100分。新版NCRE二级VisualBasic考试大纲2005年新版NCRE二级VisualBasic考试大纲公共基础知识VisualBasic语言程序设计基本要求1、熟悉VisualBasic集成开发环境。2、了解VisualBasic中对象的概念和事件驱动程序的基本特性。3、了解简单的数据结构和算法。4、能够编写和调试简单的VisualBasic程序。考试内容一、VisualBasic程序开发环境1、VisualBasic的特点和版本。2、VisualBasic的启动与退出。3、主窗口:(1)标题和菜单。(2)工具栏。4、其他窗口:(1)窗体设计器和工程资源管理器。(2)属性窗口和工具箱窗口。二、对象及其操作1、对象:(1)VisualBasic的对象。(2)对象属性设置。2、窗体:(1)窗体的结构与属性。(2)窗体事件。3、控件:(1)标准控件。(2)控件的命名和控件值。4、控件的画法和基本操作。5、事件驱动。三、数据类型及其运算1、数据类型:(1)基本数据类型。(2)用户定义的数据类型。(3)枚举类型。2、常量和变量:(1)局部变量与全局变量。(2)变体类型变量。(3)缺省声明。3、常用内部函数。4、运算符与表达式:(1)算术运算符。(2)关系运算符与逻辑运算符。(3)表达式的执行顺序。四、数据输入、输出1、数据输出:(1)Print方法。(2)与Print方法有关的函数(Tab、Spc、Space$)。(3)格式输出(Fomat$)。2、InputBox函数。3、MsgBox函数和MsgBox语句。4、字形。5、打印机输出:(1)直接输出。(2)窗体输出。五、常用标准控件1、文本控件:(1)标签。(2)文本框。2、图形控件:(1)图片框,图像框的属性,事件和方法。(2)图形文件的装入。(3)直线和形状。3、按钮控件。4、选择控件:复选框和单选按钮。5、选择控件:列表框和组合框。6、滚动条。7、计时器。8、框架。9、焦点与Tab顺序。六、控制结构1、选择结构:(1)单行结构条件语句。(2)块结构条件语句。(3)IIf函数。2、多分支结构。3、For循环控制结构。4、当循环控制结构。5、Do循环控制结构。6、多重循环。7.GoTo型控制:(1)GoTo语句。(2)On-GoTo语句。七、数组1、数组的概念:(1)数组的定义。(2)静态数组与动态数组。2、数组的基本操作:(1)数组元素的输入、输出和复制。(2)ForEachNext语句。(3)数组的初始化。3、控件数组。八、过程1、Sub过程:(1)Sub过程的建立。(2)调用Sub过程。(3)通用过程与事件过程。2、Function过程:(1)Function过程的定义。(2)调用Function过程。3、参数传送:(1)形参与实参。(2)引用。(3)传值。(4)数组参数的传送。4、可选参数与可变参数。5、对象参数:(1)窗体参数。(2)控件参数。九、菜单与对话框1、用菜单编辑器建立菜单2、菜单项的控制:(1)有效性控制。(2)菜单项标记。(3)键盘选择。3、菜单项的增减。4、弹出式菜单。5、通用对话框。6、文件对话框。7、其他对话框(颜色、字体、打印对话框)。十、多重窗体与环境应用1、建立多重窗体应用程序。2、多重窗体程序的执行与保存。3、VisualBasic工程结构。(1)标准模块。(2)窗体模块。(3)SubMain过程。4、闲置循环与DoEvents语句。十一、键盘与鼠标事件过程1、KeyPress事件。2、KeyDown与KeyUp事件。3、鼠标事件。4、鼠标光标。5、拖放。十二、数据文件1、文件的结构和分类。2、文件操作语句和函数。3、顺序文件:(1)顺序文件的写操作。(2)顺序文件的读操作。4、随机文件:(1)随机文件的打开与读写操作。(2)随机文件中记录的增加与删除。(3)用控件显示和修改随机文件。5、文件系统控件:(1)驱动器列表框和目录列表框。(2)文件列表框。6、文件基本操作。考试方式1、笔试:90分钟,满分100分,其中含公共基础知识部分的30分。2、上机操作:90分钟,满分100分。上机操作包括:(l)基本操作。(2)简单应用。(3)综合应用。二级(VisualFoxPro数据库程序设计)考试大纲基本要求1、具有数据库系统的基础知识。2,基本了解面向对象的概念。3、掌握关系数据库的基本原理。4、掌握数据库程序设计方法。5、能够使用VisualFoxPro建立一个小型数据库应用系统。考试内容一、VisualFoxPro基础知识1、基本概念:数据库、数据模型、数据库管理系统、类和对象、事件、方法。2、关系数据库(l)关系数据库:关系模型、关系模式、关系、元组、属性、域、主关键字和外部关键字。(2)关系运算:选择、投影、连接。(3)数据的一致性和完整性:实体完整性、域完整性、参照完整性。3、VisualFoxPro系统特点与工作方式:(1)Windows版本数据库的特点。(2)数据类型和主要文件类型。(3)各种设计器和向导。(4)工作方式:交互方式(命令方式、可视化操作)和程序运行方式。4、VisualFoxPro的基本数据元素:(1)常量、变量、表达式。(2)常用函数:字符处理函数、数值计算函数、日期时间函数、数据类型转换函数、测试函数。二、VisualFoxPro数据库的基本操作1、数据库和表的建立、修改与有效性检验:(1)表结构的建立与修改。(2)表记录的浏览、增加、删除与修改。(3)创建数据库,向数据库添加或移出表。(4)设定字段级规则和记录级规则。(5)表的索引:主索引、候选索引、普通索引、唯一索引。2、多表操作:(1)选择工作区。(2)建立表之间的关联:一对一的关联;一对多的关联。(3)设置参照完整性。(4)建立表间临时关联。3、建立视图与数据查询:(l)查询文件的建立、执行与修改。(2)视图文件的建立、查看与修改。(3)建立多表查询。(3)建立多表视图。三、关系数据库标推语言sqll、SQL的数据定义功能:(1)CREATETABLE-SQL。(2)ALTERTABLE-SQL。2、SQL的数据修改功能:(1)DELETE-SQL。(2)INSERT-SQL。(3)UPDATE-SQL。3、SQL的数据查询功能:(1)简单查询。(2)嵌套查询。(3)连接查询。内连接外连接:左连接,右连接,完全连接。(4)分组计算查询。(5)集合的并运算。四、项目管理器、设计器和向导的使用1、使用项目管理器:(1)使用"数据"选项卡。(2)使用"文档"选项卡。2、使用表单设计器:(1)在表单中加入和修改控件对象。(2)设定数据环境。3、使用菜单设计器:(1)建立主选项。(2)设计子菜单。(3)设定菜单选项程序代码。4、使用报表设计器:(1)生成快速报表。(2)修改报表布局。(3)设计分组报表。(4)设计多栏报表。5、使用应用程序向导。6、应用程序生成器与连编应用程序。五、VisualFoxPro程序设计1、命令文件的建立与运行:(1)程序文件的建立。(2)简单的交互式输入输出命令。(3)应用程序的调试与执行。2、结构化程序设计:(1)顺序结构程序设计。(2)选择结构程序设计。(3)循环结构程序设计。3、过程与过程调用:(1)子程序设计与调用。(2)过程与过程文件。(3)局部变量和全局变量、过程调用中的参数传递。4、用户定义对话框(MESSAGEBOX)的使用。考试方式1、笔试:90分钟,满分100分,其中含公共基础知识部分的30分。2、上机操作:90分钟,满分100分。(l)基本操作。(2)简单应用。(3)综合应用。最新二级C++语言程序设计考试大纲基本要求1.掌握C++语言的基本语法规则。2.熟练掌握有关类与对象的相关知识。3.能够阅读和分析C++程序。4.能够采用面向对象的编程思路和方法编写应用程序。5.能熟练使用VisualC++6.0集成开发环境编写和调试程序。考试内容一、C++语言概述1.了解C++语言的基本符号。2.了解C++语言的词汇(保留字、标识符、常量、运算符、标点符号等)。3.掌握C++程序的基本框架(结构程序设计框架、面向对象程序设计框架等)。4.能够使用VisualC++6.0集成开发环境编辑、编译、运行与调试程序。二、数据类型、表达式和基本运算1.掌握C++数据类型(基本类型,指针类型)及其定义方法。2.了解C++的常量定义(整型常量,字符常量,逻辑常量,实型常量,地址常量,符号常量)。3.掌握变量的定义与使用方法(变量的定义及初始化,全局变量,局部变量)。4.掌握C++运算符的种类、运算优先级和结合性。5.熟练掌握C++表达式类型及求值规则(赋值运算,算术运算符和算术表达式,关系运算凸叵当泶锸剑呒怂惴吐呒泶锸剑跫怂悖刚朐怂悖汉疟泶锸剑?三、C++的基本语句1.掌握C++的基本语句,例如赋值语句、表达式语句、复合语句、输入、输出语句和空语句等。2.用if语句实现分支结构。3.用switch语句实现多分支选择结构。4.用for语句实现循环结构。5.用while语句实现循环结构。6.用do…while语句实现循环结构。7.转向语句(goto,continue,break和return)。8.掌握分支语句和循环语句的各种嵌套使用。四、数组、指针与引用1.掌握一维数组的定义、初始化和访问,了解多维数组的定义、初始化和访问。2.了解字符串与字符数组。3.熟练掌握常用字符串函数(strlen,strcpy,strcat,strcmp,strstr等)。4.指针与指针变量的概念,指针与地址运算符,指针与数组。5.引用的基本概念,引用的定义与使用。五、掌握函数的有关使用1.函数的定义方法和调用方法。2.函数的类型和返回值。3.形式参数与实在参数,参数值的传递。4.变量的作用域、生存周期和存储类别(自动,静态,寄存器,外部)。5.递归函数。6.函数重载。7.内联函数。8.带有缺省参数值的函数。六、熟练掌握类与对象的相关知识1.类的定义方式、数据成员、成员函数及访问权限(public,private,protected)。2.对象和对象指针的定义与使用。3.构造函数与析构函数。4.静态数据成员与静态成员函数的定义与使用方式。5.常数据成员与常成员函数。6.this指针的使用。7.友元函数和友元类。8.对象数组与成员对象。七、掌握类的继承与派生知识1.派生类的定义和访问权限。2.继承基类的数据成员与成员函数。3.基类指针与派生类指针的使用。4.虚基类。八、了解多态性概念1.虚函数机制的要点。2.纯虚函数与抽象基类、虚函数。3.了解运算符重载。九、模板1.简单了解函数模板的定义和使用方式。2.简单了解类模板的定义和使用方式。十、输入输出流1.掌握C++流的概念。2.能够使用格式控制数据的输入输出。3.掌握文件的I/O操作。考试方式1.笔试:90分钟,满分100分,其中含公共基础知识部分的30分。2.上机操作:90分钟,满分100分。上机操作包括:(1)基本操作。(2)简单应用。(3)综合应用。新版Access考试大纲新版NCREAccess数据库程序设计语言考试大纲公共基础知识Access数据库程序设计基本要求1.具有数据库系统的基础知识。2.基本了解面向对象的概念。3.掌握关系数据库的基本原理。4.掌握数据库程序设计方法。5.能使用Access建立一个小型数据库应用系统。考试内容一、数据库基础知识1.基本概念:数据库,数据模型,数据库管理系统,类和对象,事件。2.关系数据库基本概念:关系模型(实体的完整性,参照的完整性,用户定义的完整性),关系模式,关系,元组,属性,字段,域,值,主关键字等。3.关系运算基本概念:选择运算,投影运算,连接运算。4.SQL基本命令:查询命令,操作命令。5.Access系统简介:(1)Access系统的基本特点。(2)基本对象:表,查询,窗体,报表,页,宏,模块。二、数据库和表的基本操作1.创建数据库:(1)创建空数据库。(2)使用向导创建数据库。2.表的建立:(1)建立表结构:使用向导,使用表设计器,使用数据表。(2)设置字段属性。(3)输入数据:直接输入数据,获取外部数据。3.表间关系的建立与修改:(1)表间关系的概念:一对一,一对多。(2)建立表间关系。(3)设置参照完整性。4.表的维护:(1)修改表结构:添加字段,修改字段,删除字段,重新设置主关键字。(2)编辑表内容:添加记录,修改记录,删除记录,复制记录。(3)调整表外观。5.表的其他操作:(1)查找数据。(2)替换数据。(3)排序记录。(4)筛选记录。三、查询的基本操作1.查询分类:(1)选择查询。(2)参数查询。(3)交*表查询。(4)操作查询。(5)SQL查询。2.查询准则:(1)运算符。(2)函数。(3)表达式。3.创建查询:(1)使用向导创建查询。(2)使用设计器创建查询。(3)在查询中计算。4.操作已创建的查询:(1)运行已创建的查询。(2)编辑查询中的字段。(3)编辑查询中的数据源。(4)排序查询的结果。四、窗体的基本操作1.窗体分类:(1)纵栏式窗体。(2)表格式窗体。(3)主/子窗体。(4)数据表窗体。(5)图表窗体。(6)数据透视表窗体。2.创建窗体:(1)使用向导创建窗体。(2)使用设计器创建窗体:控件的含义及种类,在窗体中添加和修改控件,设置控件的常见属性。五、报表的基本操作1.报表分类:(1)纵栏式报表;(2)表格式报表。(3)图表报表。(4)标签报表。2.使用向导创建报表。3.使用设计器编辑报表。4.在报表中计算和汇总。六、页的基本操作1.数据访问页的概念。2.创建数据访问页:(1)自动创建数据访问页。(2)使用向导数据访问页。七、宏1.宏的基本概念。2.宏的基本操作:(1)创建宏:创建一个宏,创建宏组。(2)运行宏。(3)在宏中使用条件。(4)设置宏操作参数。(5)常用的宏操作。八、模块1.模块的基本概念:(1)类模块。(2)标准模块。(3)将宏转换为模块。2.创建模块:(1)创建VBA模块:在模块中加入过程,在模块中执行宏。(2)编写事件过程:键盘事件,鼠标事件,窗口事件,操作事件和其他事件。3.调用和参数传递。4.VBA程序设计基础:(1)面向对象程序设计的基本概念。(2)VBA编程环境:进入VBE,VBE界面。(3)VBA编程基础:常量,变量,表达式。(4)VBA程序流程控制:顺序控制,选择控制,循环控制。(5)VBA程序的调试:设置断点,单步跟踪,设置监视点。考试方式1.笔试:90分钟,满分100分,其中含公共基础知识部分的30分。2.上机操作:90分钟,满分100分。上机操作包括:(1)基本操作。(2)简单应用。(3)综合应用2004年新版NCRE二级Java语言程序设计考试大纲公共基础知识Java语言程序设计基本要求1.掌握Java语言的特点,实现机制和体系结构。2.掌握Java语言中面向对象的特性。3.掌握Java语言提供的数据类型和结构。4.掌握Java语言编程的基本技术。5.会编写Java用户界面程序。6.会编写Java简单应用程序。7.会编写Java小应用程序(Applet)。8.了解Java的应用。考试内容一、Java语言的特点和实现机制二、Java体系结构1.JDK目录结构。2.Java的API结构。3.开发环境设置。4.Java程序结构。三、Java语言中面向对象的特性1.面向对象编程的基本概念和特征。2.类的基本组成和使用。3.对象的生成、使用和删除。4.接口与包。5.Java类库的常用类和接口。四、Java简单数据类型及运算1.变量和常量。2.基本数据类型及转换。3.Java类库中对简单数据类型的类包装。4.运算符和表达式运算。5.数组和字符串。五、Java语言的基本语句1.表达式语句。2.条件语句。3.循环语句。4.注释语句。5.异常处理。六、Java编程技术基础1.线程的概念和使用。2.同步与共享。3.串行化概念和目的。4.串行化方法。5.串行化的举例。6.基于文本的应用。7.文件和文件I/O。8.汇集(collections)接口。七、编写用户界面程序1.图形用户界面。2.AWT库简介。3.Swing简介。4.AWT与Swing比较。八、编写小应用程序(Applet)1.小应用程序概念。2.安全机制。3.Applet执行过程。4.Applet的图形绘制。5.Applet的窗口。6.Applet的工作环境。7.JavaApplication和Applet。九、Java的应用十、J2DK的下载和操作考试方式1.笔试:90分钟,满分100分,其中含公共基础知识部分的30分。2.上机操作:90分钟,满分100分。上机题目类型要求:(1)基本操作。(2)简单应用。3综合应用
㈡ android 数据库框架哪个好
请看sqllite增删改查的小例子,例子来自于android学习手册,里面有源码。android学习手册包含9个章节,108个例子,源码文档随便看,例子都是可交互,可运行,源码采用android studio目录结构,高亮显示代码,文档都采用文档结构图显示,可以快速定位。360手机助手中下载,图标上有贝壳
先介绍一下ORM的概念,以前也一直听说,不过没详细了解啥意思。其全称叫做对象关系映射(Object Relation Mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。
面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的. 两者之间是不匹配的.而ORM作为项目中间件形式实现数据在不同场景下数据关系映射. 对象关系映射是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.ORM就是这样而来的。
下面先列出几个ORM框架:ORMLite、green、ormndroid、androrm、ActiveAndroid
其中以前最早接触过ormlite,GreenDao了解过,其他的几个真没怎么见过。所以这里主要介绍ormlite和GreenDao。
最开始现在stackoverflow输入sqlite orm关键字,搜索出了一些相关的文章:http://stackoverflow.com/search?q=sqlite+orm,你会发现很有趣的是,ormlite的作者Gray和greenDao的开发团队green robot同时出现在一些帖子中,向提问者推荐他们的框架。当然也会有一些热心的朋友推荐ormdroid。其实不论在stackoverflow上还是官网上,greenDao的团队的比较都是针对ORMLite的,可见,其主要的竞争对手,或许称互相促进者更合适,毕竟他们没有什么商业利益,完全开源。所以开源的ORM框架中,ormLite和greenDao是最火的。其它几种就不做比较,有兴趣的朋友可以到官网看下。下面对ORMLite和GreenDao做个简单的比较:
ormlite
基于注解和反射的的方式,导致ormlite性能有着一定的损失(注解其实也是利用了反射的原理)
优点:
文档较全面,社区活跃,有好的维护,使用简单,易上手。
缺点:
基于反射,效率较低
GreenDao
官网中明确指明了其首要设计目标:
Maximum performance (probably the fastest ORM for Android):系能最大化
Easy to use APIs:便于使用
Highly optimized for Android:对于Android高度优化
Minimal memory consumption:最小化内存开销
Small library size, focus on the essentials:较小的文件体积,只集中在必要的部分上。
优点:
效率很高,插入和更新的速度是sqlite的2倍,加载实体的速度是ormlite的4.5倍。官网测试结果:http:/
/green-orm.com/features/
文件较小(<100K),占用更少的内存 ,但是需要create Dao,
操作实体灵活:支持get,update,delete等操作
缺点:
学习成本较高。其中使用了一个java工程根据一些属性和规则去generate一些基础代码,类似于javaBean但会有一些规则,另外还有QueryBuilder、Dao等API,所以首先要明白整个过程,才能方便使用。没有ORMLite那样封装的完整,不过greenDao的官网上也提到了这一点,正是基于generator而不是反射,才使得其效率高的多。
另外GreenDao支持Protocol buffers协议数据的直接存储 ,如果通过protobuf协议和服务器交互,不需要任何的映射。
Protocol Buffers协议:以一种高效可扩展的对结构化数据进行编码的方式。google内部的RPC协议和文件格式大部分都是使用它。
RPC:远程过程调用(Remote Procere Call,RPC)是一个计算机通信协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
可能因为GreenDao的效率高,而且需要学习成本高点,所以个人还是有兴趣学一学的。接下来会发布一些GreenDao更详细的文章,有对官方文档的翻译还有代码的简单讲解。
或许以上内容很简单,只是简单的介绍了下,对其它几个框架并没有做更多的介绍,有了解的朋友可以提出来,可以提出来,大家一起探讨下。
㈢ xutils3和xutils3什么区别
区别如下:
1、数据库方面,两者注解映射不同
xUtils2下 @Table(name="stu",execAfterTableCreated ="" ),而xUtils3下直接是代替了onCreated。
2、数据库创建和查询有改动,但基本还是相同
xutils2中db.findFirst(Selector.from(Parent.class)。where.....而xUtils3中则是db.selector(Parent.class).where(....).findFirst();但是里面基本的条件例如where,whereBuilder等参数还是没变的。
3、网络操作方面不同
xUtils3是直接x.image().bind..或者x.http().post()等取代了http.send(method,url,callback)。
4、视图方面不同
xutils3中@Event()代替了@onClick(),而且下面的private代替了public。
㈣ android中的常用框架有哪些
Afinal框架
主要有四大模块:
(1) 数据库模块:android中的orm框架,使用了线程池对sqlite进行操作。
(2) 注解模块:android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定。无需findViewById和setClickListener等。
(3) 网络模块:通过httpclient进行封装http数据请求,支持ajax方式加载,支持下载、上传文件功能。
(4) 图片缓存模块:通过FinalBitmap,imageview加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。
FinalBitmap可以配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等。FinalBitmap的内存管理使用lru算法,
没有使用弱引用(android2.3以后google已经不建议使用弱引用,android2.3后强行回收软引用和弱引用,详情查看android官方文档),
更好的管理bitmap内存。FinalBitmap可以自定义下载器,用来扩展其他协议显示网络图片,比如ftp等。同时可以自定义bitmap显示器,
在imageview显示图片的时候播放动画等(默认是渐变动画显示)。
xUtils框架
主要有四大模块:
(1) 数据库模块:android中的orm框架,一行代码就可以进行增删改查;
支持事务,默认关闭;
可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
支持绑定外键,保存实体时外键关联实体自动保存或更新;
自动加载外键关联实体,支持延时加载;
支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
(2) 注解模块:android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
(3) 网络模块:支持同步,异步方式的请求;
支持大文件上传,上传大文件不会oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;
下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。
(4) 图片缓存模块:加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
支持加载网络图片和本地图片;
内存管理使用lru算法,更好的管理bitmap内存;
可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...
㈤ xutils里的dbutils数据库和activeandroid的区别
xUtils中DbUtils默认把数据库存在哪里,还有就是,如果是有关联的两张表,在对数据进行存储的时候该怎样操作?
------解决思路----------------------
一般是存储在默认的Android 系统 DATA 下面的你的packagename 目录下,你可以调试用DDMS文件管理看看,
多表关联 只不过是查询语句的问题
------解决思路----------------------
就是优化过的sqlite吧,可能在/data/data/包名/database/XX.db
------解决思路----------------------
存储在sqlite的xUtils.db中
㈥ 增使用的是DBManager的哪些方法
1.DaoConfig Config=XUtil.getDaoConfig();
2.DbManager db = x.getDb(Config);
这里我要告诉大家的是,数据库里面表的创建的时间,只有在你对数据库里面的操作涉及到这张表的操作时,会先判断当前的表是否存在,如果不存在,才会创建一张表,如果存在,才会进行相应的CRUD操作,但是只要我们想进行一张表的CRUD操作,我们必须先执行上面的2步,通俗点说就是必须拿到一个Dbmanger这个对象,我为什么这么说呢?那么咱们就先看一下DbManger的庐山真面目吧。
DbManager部分源码如下:
[java] view plain print?
public interface DbManager extends Closeable {
DaoConfig getDaoConfig();
SQLiteDatabase getDatabase();
/**
* 保存实体类或实体类的List到数据库,
* 如果该类型的id是自动生成的, 则保存完后会给id赋值.
*
* @param entity
* @return
* @throws DbException
*/
boolean saveBindingId(Object entity) throws DbException;
/**
* 保存或更新实体类或实体类的List到数据库, 根据id对应的数据是否存在.
*
* @param entity
* @throws DbException
*/
void saveOrUpdate(Object entity) throws DbException;
/**
* 保存实体类或实体类的List到数据库
*
* @param entity
* @throws DbException
*/
void save(Object entity) throws DbException;
/**
* 保存或更新实体类或实体类的List到数据库, 根据id和其他唯一索引判断数据是否存在.
*
* @param entity
* @throws DbException
*/
void replace(Object entity) throws DbException;
///////////// delete
void deleteById(Class<?> entityType, Object idValue) throws DbException;
void delete(Object entity) throws DbException;
void delete(Class<?> entityType) throws DbException;
void delete(Class<?> entityType, WhereBuilder whereBuilder) throws DbException;
///////////// update
void update(Object entity, String... updateColumnNames) throws DbException;
void update(Object entity, WhereBuilder whereBuilder, String... updateColumnNames) throws DbException;
///////////// find
<T> T findById(Class<T> entityType, Object idValue) throws DbException;
<T> T findFirst(Class<T> entityType) throws DbException;
<T> List<T> findAll(Class<T> entityType) throws DbException;
<T> Selector<T> selector(Class<T> entityType) throws DbException;
DbModel findDbModelFirst(SqlInfo sqlInfo) throws DbException;
List<DbModel> findDbModelAll(SqlInfo sqlInfo) throws DbException;
///////////// table
/**
* 删除表
*
* @param entityType
* @throws DbException
*/
void dropTable(Class<?> entityType) throws DbException;
/**
* 添加一列,
* 新的entityType中必须定义了这个列的属性.
*
* @param entityType
* @param column
* @throws DbException
*/
void addColumn(Class<?> entityType, String column) throws DbException;
///////////// db
/**
* 删除库
*
* @throws DbException
*/
void dropDb() throws DbException;
/**
* 关闭数据库,
* xUtils对同一个库的链接是单实例的, 一般不需要关闭它.
*
* @throws IOException
*/
void close() throws IOException;
///////////// custom
void execNonQuery(SqlInfo sqlInfo) throws DbException;
void execNonQuery(String sql) throws DbException;
Cursor execQuery(SqlInfo sqlInfo) throws DbException;
Cursor execQuery(String sql) throws DbException;
}
通过DbManager这个类我们知道主要它做了以下几件事情:
1.getDaoConfig 获取数据库的配置信息
2.getDatabase 获取数据库实例
3.saveBindingId saveOrUpdate save 插入数据的3个方法(保存数据)
4.replace 只有存在唯一索引时才有用 慎重
5.delete操作的4种方法(删除数据)
6.update操作的2种方法(修改数据)
7.find操作6种方法(查询数据)
8.dropTable 删除表
9.addColumn 添加一列
10.dropDb 删除数据库
㈦ android 中的数据库存在在工程中的哪个目录下
Android中有内置的数据库SQLite,其默认存储位置是在:标题栏中Window->show view->File Exporer->data/data/应用项目的包名,例如:假如有一个操作Android SQLite数据库的应用包名为com.example.xutilsdemo,那么其内置的数据库的存储位置即为:/data/data/com.example.xutilsdemo/databases/xxx.db
㈧ android平台的app 手机客户端和后台服务器怎么进行数据交互的
首先不要管安卓端还是苹果端,现在一般都是响应式的app,你放到安卓或者苹果或者pc或者平板都是没有问题的。一般采用的是http接口通讯,或者socket连接。具体你要去查资料找Demo了。而且现在主流是采用html5开发或者混合开发了。所以最好是服务器提供appAPI接口,通过http访问服务器,获取数据,数据一般是json,或者xml,拿到后解析数据就可以了,然后再用UI框架或者其他框架或者自定义的UI封装下格式很漂亮了,至于cookie和session等,看你的习惯,网络验证和签名那些也自己看习惯,如果涉及到大数据,还需要引入第三方框架的,直接引入就可以了,不过推荐自己写,防止侵权。都是很通用的。
㈨ android开发一般都使用什么框架
目前框架使用的主要都是开源框架,都可以在github上找到:
1、volley
2、android-async-http
3、Afinal框架
4、xUtils框架
5、ThinkAndroid
6、LoonAndroid
主要有以下模块:
(1) 自动注入框架(只需要继承框架内的application既可)
(2)
图片加载框架(多重缓存,自动回收,最大限度保证内存的安全性)
(3) 网络请求模块(继承了基本上现在所有的http请求)
(4)
eventbus(集成一个开源的框架)
(5) 验证框架(集成开源框架)
(6) json解析(支持解析成集合或者对象)
(7) 数据库(不知道是哪位写的 忘记了)
(8) 多线程断点下载(自动判断是否支持多线程,判断是否是重定向)
(9)
自动更新模块
(10) 一系列工具类
㈩ android数据库存储,代码创建数据库、表,实现编辑框内输入,点击按钮提交进行存入;从数据库中提
常量类:ConstantUtil
publicclassConstantUtil{
//数据库名称
_NAME="user_manager.db";
//数据库版本号
publicstaticfinalintDATABASE_VERSION=1;
//表名
publicstaticfinalStringTABLE_NAME="user_info";
//字段名
publicstaticfinalStringUSER_ID="userId";
publicstaticfinalStringUSER_NAME="username";
publicstaticfinalStringUSER_PASSWORD="password";
publicstaticfinalStringUSER_ADDRESS="address";
}
自定义SQLiteOpenHelper:MySQLiteOpenHelper
{
//定义一个SQLiteDatabase对象,对表进行相应的操作
;
publicMySQLiteOpenHelper(Contextcontext){
super(context,ConstantUtil.DATABASE_NAME,null,
ConstantUtil.DATABASE_VERSION);
mDatabase=getWritableDatabase();
}
/*
*创建表
*/
@Override
publicvoidonCreate(SQLiteDatabasedb){
//TODOAuto-generatedmethodstub
//sql语句
Stringsql="createtable"+ConstantUtil.TABLE_NAME+"("
+ConstantUtil.USER_ID+"integerprimarykey,"
+ConstantUtil.USER_NAME+"textnotnull,"
+ConstantUtil.USER_PASSWORD+"textnotnull,"
+ConstantUtil.USER_ADDRESS+"textnotnull)";
db.execSQL(sql);
}
@Override
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
//TODOAuto-generatedmethodstub
onCreate(db);
}
/**
*添加数据
*@paramcv
*@return
*/
publicbooleaninsertData(ContentValuescv){
returnmDatabase.insert(ConstantUtil.TABLE_NAME,null,cv)>0;
}
/**
*查询所有数据
*@return
*/
publicList<Userinfo>queryData(){
List<Userinfo>userinfos=newArrayList<Userinfo>();
//从数据库里查询数据
Cursorcursor=mDatabase.query(ConstantUtil.TABLE_NAME,null,null,null,null,null,null);
if(cursor!=null){
//取出数据
while(cursor.moveToNext()){
Userinfouserinfo=newUserinfo();
userinfo.setUserId(cursor.getInt(0));
userinfo.setUsername(cursor.getString(1));
userinfo.setPassword(cursor.getString(2));
userinfo.setAddress(cursor.getString(3));
userinfos.add(userinfo);
}
}
returnuserinfos;
}
}
主Activity
{
//控件
privateTextViewtxtName,txtPwd,txtAddress;
privateEditTextedtName,edtPwd,edtAddress;
privateListViewmListView;
//数据库对象
;
privateUserinfoAdapteradapter;
/**.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findView();
init();
}
privatevoidfindView(){
//TODOAuto-generatedmethodstub
edtName=(EditText)findViewById(R.id.id_edit1);
edtPwd=(EditText)findViewById(R.id.id_edit2);
edtAddress=(EditText)findViewById(R.id.id_edit3);
mListView=(ListView)findViewById(R.id.id_listview);
}
privatevoidinit(){
//TODOAuto-generatedmethodstub
mySQLiteOpenHelper=newMySQLiteOpenHelper(MainActivity.this);
}
publicvoidonAction(Viewv){
switch(v.getId()){
caseR.id.id_btn_add:
//添加数据
StringuserName=edtName.getText().toString();
StringuserPwd=edtPwd.getText().toString();
StringuserAdress=edtAddress.getText().toString();
//传入参数
ContentValuescv=newContentValues();
//列名和值
cv.put(ConstantUtil.USER_NAME,userName);
cv.put(ConstantUtil.USER_PASSWORD,userPwd);
cv.put(ConstantUtil.USER_ADDRESS,userAdress);
//得到结果
booleanflag=mySQLiteOpenHelper.insertData(cv);
if(flag){
Toast.makeText(MainActivity.this,"添加记录成功",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this,"添加记录失败",Toast.LENGTH_SHORT).show();
}
break;
caseR.id.id_btn_query:
//查询数据
List<Userinfo>userinfos=mySQLiteOpenHelper.queryData();
if(adapter!=null){
adapter=null;
}
adapter=newUserinfoAdapter(userinfos);
mListView.setAdapter(adapter);
break;
default:
break;
}
}
//数据适配器
{
List<Userinfo>userinfos;
publicUserinfoAdapter(List<Userinfo>_userinfos){
this.userinfos=_userinfos;
}
@Override
publicintgetCount(){
//TODOAuto-generatedmethodstub
returnuserinfos.size();
}
@Override
publicObjectgetItem(intposition){
//TODOAuto-generatedmethodstub
returnuserinfos.get(position);
}
@Override
publiclonggetItemId(intposition){
//TODOAuto-generatedmethodstub
returnposition;
}
@Override
publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
//TODOAuto-generatedmethodstub
if(convertView==null){
convertView=LayoutInflater.from(MainActivity.this).inflate(R.layout.listview_item,null);
txtName=(TextView)convertView.findViewById(R.id.id_txt_name);
txtPwd=(TextView)convertView.findViewById(R.id.id_txt_pwd);
txtAddress=(TextView)convertView.findViewById(R.id.id_txt_address);
txtName.setText(userinfos.get(position).getUsername());
txtPwd.setText(userinfos.get(position).getPassword());
txtAddress.setText(userinfos.get(position).getAddress());
}
returnconvertView;
}
}
}
完整源码下载地址(附数据库文件查询软件+运行效果图):