文档库 最新最全的文档下载
当前位置:文档库 › SQLite3 API编程手册

SQLite3 API编程手册

SQLite3 API编程手册
SQLite3 API编程手册

SQLite3API编程手册

前序: (1)

一、版本 (1)

二、基本编译 (2)

三、SQLITE操作入门 (2)

(1)基本流程 (2)

(2)SQL语句操作 (4)

(3)操作二进制 (8)

(4)事务处理 (10)

四、给数据库加密 (10)

五、后记 (25)

前序:

Sqlite3 的确很好用。小巧、速度快。但是因为非微软的产品,帮助文档总觉得不够。这些天再次研究它,又有一些收获,这里把我对sqlite3 的研究列出来,以备忘记。

这里要注明,我是一个跨平台专注者,并不喜欢只用windows 平台。我以前的工作就是为unix 平台写代码。下面我所写的东西,虽然没有验证,但是我已尽量不使用任何windows 的东西,只使用标准 C 或标准C++。但是,我没有尝试过在别的系统、别的编译器下编译,因此下面的叙述如果不正确,则留待以后修改。

下面我的代码仍然用VC 编写,因为我觉得VC是一个很不错的IDE,可以加快代码编写速度(例如配合Vassist )。下面我所说的编译环境,是VC2003。如果读者觉得自己习惯于unix 下用vi 编写代码速度较快,可以不用管我的说明,只需要符合自己习惯即可,因为我用的是标准 C 或C++ 。不会给任何人带来不便。

一、版本

从网站可下载到最新的sqlite 代码和编译版本。我写此文章时,最新代码是版本。

很久没有去下载sqlite 新代码,因此也不知道sqlite 变化这么大。以前很多文件,现在全部合并成一个文件。如果单独用此文件,是挺好的,省去拷贝一堆文件还担心有没有遗漏。但是也带来一个问题:此文件太大,快接近7万行代码,VC开它整个机器都慢下来了。如果不需要改它代码,也就不需要打开文件,机器不会慢。但是,下面我要写通过修改sqlite 代码完成加密功能,那时候就比较痛苦了。如果个人水平较高,建议用些简单的编辑器来编辑,例如UltraEdit 或Notepad 。速度会快很多。

二、基本编译

这个不想多说了,在VC 里新建dos 控制台空白工程,把和添加到工程,再新建一个文件。在里面写:

extern "C"

{

#include "./"

};

int main( int , char** )

{

return 0;

}

为什么要extern “C” 如果问这个问题,我不想说太多,这是C++的基础。要在C++ 里使用一段 C 的代码,必须要用extern “C” 括起来。C++跟C虽然语法上有重叠,但是它们是两个不同的东西,内存里的布局是完全不同的,在C++编译器里不用extern “C”括起C代码,会导致编译器不知道该如何为 C 代码描述内存布局。

可能在里人家已经把整段代码都extern “C” 括起来了,但是你遇到一个.c 文件就自觉的再括一次,也没什么不好。基本工程就这样建立起来了。编译,可以通过。但是有一堆的warning。可以不管它。

三、SQLITE操作入门

sqlite提供的是一些C函数接口,你可以用这些函数操作数据库。通过使用这些接口,传递一些标准sql 语句(以char * 类型)给sqlite 函数,sqlite 就会为你操作数据库。

sqlite 跟MS的access一样是文件型数据库,就是说,一个数据库就是一个文件,此数据库里可以建立很多的表,可以建立索引、触发器等等,但是,它实际上得到的就是一个文件。备份这个文件就备份了整个数据库。

sqlite 不需要任何数据库引擎,这意味着如果你需要sqlite 来保存一些用户数据,甚至都不需要安装数据库(如果你做个小软件还要求人家必须装了sqlserver 才能运行,那也太黑心了)。

下面开始介绍数据库基本操作。

(1)基本流程

关键数据结构

sqlite 里最常用到的是sqlite3 * 类型。从数据库打开开始,sqlite就要为这个类型准备好内存,直到数据库关闭,整个过程都需要用到这个类型。当数据库打开时开始,这个类型的变量就代表了你要操作的数据库。下面再详细介绍。

打开数据库

int sqlite3_open( 文件名, sqlite3 ** );

用这个函数开始数据库操作。

需要传入两个参数,一是数据库文件名,比如:,如果此文件不存在,sqlite 会自动建立它。如果它存在,就尝试把它当数据库文件来打开。

sqlite3 ** 参数即前面提到的关键数据结构。这个结构底层细节如何,你不要关它。

函数返回值表示操作是否正确,如果是SQLITE_OK 则表示操作正常。相关的返回值sqlite定义了一些宏。具体这些宏的含义可以参考文件。里面有详细定义(顺便说一下,sqlite3 的代码注释率自称是非常高的,实际上也的确很高。只要你会看英文,sqlite 可以让你学到不少东西)。

下面介绍关闭数据库后,再给一段参考代码。

关闭数据库

int sqlite3_close(sqlite3 *);

前面如果用sqlite3_open 开启了一个数据库,结尾时不要忘了用这个函数关闭数据库。

下面给段简单的代码:

extern "C"

{

#include "./"

};

int main( int , char** )

{

sqlite3 * db = NULL; int i;

printf( “记录包含%d 个字段/n”, n_column );

for( i = 0 ; i < n_column; i ++ )

{

printf( “字段名:%s ?> 字段值:%s/n”, column_name[i], column_value[i] );

}

printf( “------------------/n“ );

return 0;

}

int main( int , char ** )

{

sqlite3 * db;

int result;

char * errmsg = NULL;

result = sqlite3_open( “, &db );

if( result != SQLITE_OK )

{

"

#include ""

int My_Encrypt_Func( unsigned char * pData, unsigned int data_len, const char * key, unsigned int len_of_key )

{

return 0;

}

int My_DeEncrypt_Func( unsigned char * pData, unsigned int data_len, const char * key, unsigned int len_of_key )

{

return 0;

}

这个文件很容易看,就两函数,一个加密一个解密。传进来的参数分别是待处理的数据、数据长度、密钥、密钥长度。处理时直接把结果作用于pData 指针指向的内容。

你需要定义自己的加解密过程,就改动这两个函数,其它部分不用动。扩展起来很简单。

这里有个特点,data_len 一般总是1024 字节。正因为如此,你可以在你的算法里使用一些特定长度的加密算法,比如AES要求被加密数据一定是128位(16字节)长。这个1024不是碰巧,而是Sqlite 的页定义是1024字节,在文件里有定义:

# define SQLITE_DEFAULT_PAGE_SIZE 1024

你可以改动这个值,不过还是建议没有必要不要去改它。

上面写了两个扩展函数,如何把扩展函数跟Sqlite 挂接起来,这个过程说起来比较麻烦。我直接贴代码。

分3个步骤。

首先,在文件顶部,添加下面内容:

#ifdef SQLITE_HAS_CODEC

#include "./"

void sqlite3pager_free_codecarg(void *pArg);

#endif

这个函数之所以要在开头声明,是因为下面在里面某些函数里要插入这个函数调用。所以要提前声明。

其次,在文件里搜索“sqlite3PagerClose”函数,要找到它的实现代码(而不是声明代码)。

实现代码里一开始是:

#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT

ThreadData *pTsd = sqlite3ThreadData();

assert( pPager );

assert( pTsd && pTsd->nAlloc );

#endif

需要在这部分后面紧接着插入:

#ifdef SQLITE_HAS_CODEC

sqlite3pager_free_codecarg(pPager->pCodecArg);

#endif

这里要注意,sqlite3PagerClose 函数大概也是版本左右才改名的,以前版本里是叫“sqlite3pager_close”。因此你在老版本sqlite代码里搜索“sqlite3PagerClose”是搜不到的。

类似的还有“sqlite3pager_get”、“sqlite3pager_unref”、“sqlite3pager_write”、“sqlite3pager_pagecount”等都是老版本函数,它们在文件里定义。新版本对应函数是在里定义(因为都合并到和两文件了)。所以,如果你在使用老版本的sqlite,先看看文件,这些函数不是消失了,也不是新蹦出来的,而是老版本函数改名得到的。

最后,往文件下找。找到最后一行:

在这一行后面,接上本文最下面的代码段。

这些代码很长,我不再解释,直接接上去就得了。

唯一要提的是DeriveKey 函数。这个函数是对密钥的扩展。比如,你要求密钥是128位,即是16字节,但是如果用户只输入1个字节呢2个字节呢或输入50个字节呢你得对密钥进行扩展,使之符合16字节的要求。

DeriveKey 函数就是做这个扩展的。有人把接收到的密钥求md5,这也是一个办法,因为md5运算结果固定16字节,不论你有多少字符,最后就是16字节。这是md5算法的特点。但是我不想用md5,因为还得为它添加包含一些md5 的.c 或.cpp文件。我不想这么做。我自己写了一个算法来扩展密钥,很简单的算法。当然,你也可以使用你的扩展方法,也而可以使用md5 算法。只要修改DeriveKey 函数就可以了。

在DeriveKey 函数里,只管申请空间构造所需要的密钥,不需要释放,因为在另一个函数里有释放过程,而那个函数会在数据库关闭时被调用。参考我的DeriveKey 函数来申请内存。

这里我给出我已经修改好的和文件。

如果太懒,就直接使用这两个文件,编译肯定能通过,运行也正常。当然,你必须按我前面提的,新建和文件,而且函数要按我前面定义的要求来做。

加密使用方法:

现在,你代码已经有了加密功能。

你要把加密功能给用上,除了改文件、给你工程添加SQLITE_HAS_CODEC 宏,还得修改你的数据库调用函数。

前面提到过,要开始一个数据库操作,必须先sqlite3_open 。

加解密过程就在sqlite3_open 后面操作。

假设你已经sqlite3_open 成功了,紧接着写下面的代码:

int i;

函数会申请缓冲区.

static LPCryptBlock CreateCryptBlock(unsigned char* hKey, Pager *pager, LPCryptBlock pExisting);

static void DestroyCryptBlock(LPCryptBlock pBlock);

static void * sqlite3pager_get_codecarg(Pager *pPager);

void sqlite3pager_set_codec(Pager *pPager,void *(*xCodec)(void*,void*,Pgno,int),void *pCodecArg );

果改变,就需要调整.

if (nMode != 2)

{

PgHdr *pageHeader;

pageHeader = DATA_TO_PGHDR(data);

if (pageHeader->pPager->pageSize != pBlock->PageSize)

{

CreateCryptBlock(0, pageHeader->pPager, pBlock);

}

}

switch(nMode)

{

case 0:

static void DestroyCryptBlock(LPCryptBlock pBlock)

{

if (pBlock->ReadKey){

sqliteFree(pBlock->ReadKey);

}

if (pBlock->WriteKey && pBlock->WriteKey != pBlock->ReadKey){

sqliteFree(pBlock->WriteKey);

}

if(pBlock->Data){

sqliteFree(pBlock->Data);

}

sqliteFree(pBlock);

}

static void * sqlite3pager_get_codecarg(Pager *pPager)

{

return (pPager->xCodec) pPager->pCodecArg: NULL;

}

函数会申请缓冲区.

static LPCryptBlock CreateCryptBlock(unsigned char* hKey, Pager *pager, LPCryptBlock pExisting) {

LPCryptBlock pBlock;

if (!pExisting) if (!pKey || !nKeyLen)

{

if (!nDb)

{

return SQLITE_OK; }

else {

Bt));

if (!pBlock) return SQLITE_OK; {

hKey = DeriveKey(pKey, nKeyLen);

}

if (hKey)

{

LPCryptBlock pBlock = CreateCryptBlock(hKey, sqlite3BtreePager(db->aDb[nDb].pBt), NULL); sqlite3pager_set_codec(sqlite3BtreePager(db->aDb[nDb].pBt), sqlite3Codec, pBlock);

rc = SQLITE_OK;

}

return rc;

}

int __stdcall sqlite3_rekey_interop(sqlite3 *db, const void *pKey, int nKeySize)

{

Btree *pbt = db->aDb[0].pBt;

Pager *p = sqlite3BtreePager(pbt);

LPCryptBlock pBlock = (LPCryptBlock)sqlite3pager_get_codecarg(p);

unsigned char * hKey = DeriveKey(pKey, nKeySize);

int rc = SQLITE_ERROR;

if (!pBlock && !hKey) return SQLITE_OK;

if (!pBlock) //加密一个未加密的数据库

{

pBlock = CreateCryptBlock(hKey, p, NULL);

pBlock->ReadKey = 0; // 原始数据库未加密

sqlite3pager_set_codec(sqlite3BtreePager(pbt), sqlite3Codec, pBlock);

}

else // 改变已加密数据库的写密钥

{

pBlock->WriteKey = hKey;

}

// 开始一个事务

rc = sqlite3BtreeBeginTrans(pbt, 1);

if (!rc)

{

// 用新密钥重写所有的页到数据库。

Pgno nPage = sqlite3PagerPagecount(p);

Pgno nSkip = PAGER_MJ_PGNO(p);

void *pPage;

Pgno n;

for(n = 1; rc == SQLITE_OK && n <= nPage; n )

{

if (n == nSkip) continue;

rc = sqlite3PagerGet(p, n, &pPage);

if(!rc)

{

rc = sqlite3PagerWrite(pPage);

sqlite3PagerUnref(pPage);

}

}

}

// 如果成功,提交事务。

if (!rc)

{

rc = sqlite3BtreeCommit(pbt);

}

// 如果失败,回滚。

if (rc)

{

sqlite3BtreeRollback(pbt);

}

// 如果成功,销毁先前的读密钥。并使读密钥等于当前的写密钥。if (!rc)

{

if (pBlock->ReadKey)

{

sqliteFree(pBlock->ReadKey);

}

pBlock->ReadKey = pBlock->WriteKey;

}

else// 如果失败,销毁当前的写密钥,并恢复为当前的读密钥。

{

if (pBlock->WriteKey)

{

sqliteFree(pBlock->WriteKey);

}

pBlock->WriteKey = pBlock->ReadKey;

}

// 如果读密钥和写密钥皆为空,就不需要再对页进行编解码。

// 销毁加密块并移除页的编解码器

if (!pBlock->ReadKey && !pBlock->WriteKey)

{

sqlite3pager_set_codec(p, NULL, NULL);

DestroyCryptBlock(pBlock);

}

return rc;

}

int __stdcall sqlite3_key_interop(sqlite3 *db, const void *pKey, int nKeySize) {

return sqlite3CodecAttach(db, 0, pKey, nKeySize);

}

// 释放与一个页相关的加密块

void sqlite3pager_free_codecarg(void *pArg)

{

if (pArg)

DestroyCryptBlock((LPCryptBlock)pArg);

}

#endif //#ifdef SQLITE_HAS_CODEC

sqlite3常用命令及语法

https://www.wendangku.net/doc/7517069157.html,/linchunhua/article/details/7184439 sqlite数据库只用一个文件就ok,小巧方便,所以是一个非常不错的嵌入式数据库,SQLite 大量的被用于手机,PDA,MP3播放器以及机顶盒设备。 Mozilla Firefox使用SQLite作为数据库。 Mac计算机中的包含了多份SQLite的拷贝,用于不同的应用。 PHP将SQLite作为内置的数据库。 Skype客户端软件在内部使用SQLite。 SymbianOS(智能手机操作平台的领航)内置SQLite。 AOL邮件客户端绑定了SQLite。 Solaris 10在启动过程中需要使用SQLite。 McAfee杀毒软件使用SQLite。 iPhones使用SQLite。 Symbian和Apple以外的很多手机生产厂商使用SQLite。 下面就sqlite中的常用命令和语法介绍 https://www.wendangku.net/doc/7517069157.html,/download.html可下载不同操作系统的相关版本sqlite gedit 也可以使用火狐中的插件sqlite manager 新建数据库 sqlite3 databasefilename 检查databasefilename是否存在,如果不存在就创建并进入数据库(如果直接退出,数据库文件不会创建)如果已经存在直接进入数据库对数据库进行操作 sqlite中命令: 以.开头,大小写敏感(数据库对象名称是大小写不敏感的) .exit .help 查看帮助针对命令 .database 显示数据库信息;包含当前数据库的位置 .tables 或者.table 显示表名称没有表则不显示 .schema 命令可以查看创建数据对象时的SQL命令; .schema databaseobjectname查看创建该数据库对象时的SQL的命令;如果没有这个数据库对象就不显示内容,不会有错误提示 .read FILENAME 执行指定文件中的SQL语句 .headers on/off 显示表头默认off .mode list|column|insert|line|tabs|tcl|csv 改变输出格式,具体如下 sqlite> .mode list sqlite> select * from emp; 7369|SMITH|CLERK|7902|17-12-1980|800||20 7499|ALLEN|SALESMAN|7698|20-02-1981|1600|300|30 如果字段值为NULL 默认不显示也就是显示空字符串

施工质量控制的内容和方法

22104030施工质量控制的内容和方法 复习要点 1.施工质量控制的基本环节和一般方法 (1)施工质量控制的基本环节包括事前、事中和事后质量控制。 (2)施工质量控制的依据分为共同性依据和专门技术法规性依据。 (3)施工质量控制的一般方法包括质量文件审核和现场质量检查。现场质量检查的内容包括开工前的检查;工序交接检查;隐蔽工程的检查;停工后复工的检查;分项、分部工程完工后的检查以及成品保护的检查。检查的方法主要有目测法、实测法和试验法。试验法又分为理化试验和无损检测。 2.施工准备阶段的质量控制 (1)施工质量控制的准备工作包括工程项目划分与编号以及技术准备的质量控制。 (2)现场施工准备的质量控制包括工程定位和标高基准的控制以及施工平面布置的控制。 (3)材料的质量控制要把好采购订货关、进场检验关以及存储和使用关。 (4)施工机械设备的质量控制包括机械设备的选型、主要性能参数指标的确定以及使用操作要求。 3.施工过程的质量控制 (1)技术交底书应由施工项目技术人员编制,并经项目技术负责人批准实施。交底的形式有:书面、口头、会议、挂牌、样板、示范操作等。 (2)项目开工前应编制测量控制方案,经项目技术负责人批准后实施。 (3)施工过程中的计量工作包括施工生产时的投料计量、施工测量、监测计量以及对项目、产品或过程的测试、检验、分析计量等。其主要任务是统一计量单位制度,组织量值传递,保证量值统一。 (4)工序施工质量控制主要包括工序施工条件质量控制和工序施工质量效果控制。 (5)特殊过程是指该施工过程或工序的施工质量不易或不能通过其后的检验和试验而得到充分验证,或万一发生质量事故则难以挽救的施工过程。其质量控制除按一般过程质量控制的规定执行外,还应由专业技术人员编制作业指导书,经项目技术负责人审批后执行。(6)成品保护的措施一般包括防护、包裹、覆盖、封闭等方法。 4.工程施工质量验收的规定和方法 (1)工程施工质量验收的内容包括施工过程的工程质量验收和施工项目竣工质量验收。(2)施工过程的工程质量验收,是在施工过程中、在施工单位自行质量检查评定的基础上,参与建设活动的有关单位共同对检验批、分项、分部、单位工程的质量进行抽样复验,根据相关标准以书面形式对工程质量达到合格与否做出确认。 (3)施工项目竣工验收工作可分为验收的准备、初步验收(预验收)和正式验收。 一单项选择题

Office办公文秘使用技巧_秘书基础

Office办公文秘使用技巧_秘书基础 “。接着单击“格式”为数字设置一些特殊格式,比如字体加大、文字加粗以及特殊颜色等。最后单击“全部替换”就可以了。不过要注意,它会让文档中的所有数字都改变的。 查找对话框中的快捷键 执行“编辑-查找”命令,或者按“Ctrl+F”键调出查找对话框,会发现对话框中的许多项目之后都有一个带下划线的字母,这就是此项的快捷键了,不过一定要先按Alt键才能让它们起作用,比如按“Alt+F”,是查找下一处,按“Alt+M”是打开高级选项,按Alt+D/P/G,是在查找、替换、定位这三个选项卡中切换等(本技巧同样适合其它的对话框)。 另外,在office20xx中进行查找/替换时,我们经常会在不关闭查找/替换对话框的情况下,切换到正文中进行修改,然后再回到查找/替换对话框中继续操作,一般都是通过鼠标点击进行切换,其实直接按Ctrl+Tab键就可以了,非常方便。 在最后一次搜索结果中快速浏览 当你搜索完毕,退出查找对话框后,如果想回过头看看刚才的搜索结果,这时不用再打开查找对话框,直接按Ctrl+PageUp键或Ctrl+PageDown键,就可以在上一次的搜索结果中快速浏览了。 高亮显示所有搜索出来的结果 为了让搜索出来的结果更醒目,可以让搜索的结果内容高亮显示出来。操作很简单:在查找对话框中选中“突出显示所有在该范围找出的项目”就可以了。 替换时巧妙保留书签

假设在word中有这么一段文本:This agreement between [John Doel] and [Mary Smith] is entered into freely and without compulsion. 其中括号括起来的部分表示定义了书签,括号是为了让大家看的清楚,真实文本中并没有出现。如果在进行替换操作时,将两个人物名称换成了其它人名,那么书签也会随之丢失。大家在定义书签时,将人名前后的空格都包括进来,如下所示:This agreement between[ John Doel ]and[ Mary Smith ]is entered into freely and without compulsion. 使用图片替换文本 有时我们可能想用图片来替换某些文本,比如,你可能想用公司的Logo图片来替换文档中的所有公司名称,可通过下面的步骤来实现: 第一步:图片插入到文档中,选取它,再按Ctrl+X键剪切把它放到系统的剪贴板中。 第二步:按“Ctrl+H”键调出替换对话框,在“查找内容”中输入要替换的文本,在“替换为”中输入“”(不含引号,下同)。 第三步:可以单击“查找下一处”、“替换”一个一个替换,也可以单击“全部替换”一次性全部替换。这时文档中的被替换的文字,就都会成图论文,会大量出现一些同样的术语或关键词,如果想让这些术语或关键词有一个统一的格式,不用一个一个设置,用替换功能很快就能完成。 第一步:找到要设置格式的第一个术语或关键词(如:“虚拟现实”),设置它的大小、字体、颜色等格式。选中设置好的术语,按“Ctrl+C”键将它复制到剪切板上。 第二步:按“Ctrl+H”键调出替换对话框,在“查找内容”中输入“虚拟

sqlite3使用教程

Sqlite3教程 一、基本命令 1、进入命令行环境: 显示版本号,并告诉每一条SQL语句必须用分号;结尾2、命令行帮助:

3、退出命令行环境 或者 二、数据库相关命令 1、创建(或打开)一个新的数据库:文件名 若文件存在,刚打开该文件;若文件不存在,则创建一个*.db数据库文件。 导入SQL语句文件。

、列出所有数据表: 4、显示数据库结构: 用一些SQL语句描述数据库的结构。 5、显示表的结构:表名 6、导入数据:文件名表名 若导入csv文件,设置分隔符为逗号。 、导出数据:文件名 查询结果默认在终端显示,查询表格结构,语句查询表格数据。设置查询目标后,查询结果显示在设置的文件中 文件名 然后输入sql查询语句,查询的结果显示在设置的文件中,不在终端显示 运行恢复导出到终端(标准输出)。 导出数据到excle表格中 设置分隔符为逗号: 设置导出文件名,后缀为csv: 查询语句:表名

三、数据显示命令 运行表名,显示全表的内容 1.设置分隔符:分隔符 默认分隔符是“|”。 2.设置显示模式:模式

默认的是list显示模式,一般使用column模式。 3.显示标题栏: 4.设置每一列的显示宽度: 5.列出当前显示格式设置情况: 四、数据库基本操作 1.数据库定义语言DDL 在关系型数据库中,数据库中的表table、视图、索引、关系和触发器等等,构成了数据库的架构。在SQL语句中,专门有一些语句用来定义数据库架构,这些语句被称为“数据库定义语言”,即DDL。 SQLite数据库引擎支持下列三种DDL语句: ●CREATE:创建 ●ALTER TABLE:改变表的结构 ●DROP:删除

SQLITE3的操作方法及应用

数据库的操作 我们在这个项目中使用的是SQLITE3数据库软件。 通过使用SQLITE3进行创建数据库,创建表,插入记录,查询记录,更新记录,关闭数据库等操作来实现将相应的数据存入数据库中。 1.打开数据库,创建表 1.1sqlite*db;定义一个sqlite*的变量 sqlite3_open(“./link.db”,&db); 在当前目录下打开一个名为link.db的数据库,若是没有则在当前目录下创建一个名为link.db 的数据库。 1.2sql="create table weblink(id integer primary key,domain text,page text,fromdomain text,status integer);" 在已打开的数据库中创建一个名weblink的表。表的属性如下: id integer primary key:ID号(表中黙认包含的) domain text:域名 page text:子网页 fromdomain text:源域名 status integer:状态标志 1.3sqlite3_exec(db,sql,NULL,NULL,NULL); 执行一条sql语句的函数。 函数原型:int sqlite3_exec(sqlite3*,const char*sql,sqlite3_callback,void*,char**errmsg) 第1个参数是前面open函数得到的指针。说了是关键数据结构。 第2个参数const char*sql是一条sql语句,以\0结尾。 第3个参数sqlite3_callback是回调,当这条语句执行之后,sqlite3会去调用你提供的这个函数。(什么是回调函数,自己找别的资料学习) 第4个参数void*是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。等下我们再看回调函数的写法,以及这个参数的使用。 第5个参数char**errmsg是错误信息。注意是指针的指针。sqlite3里面有很多固定的错误信息。执行sqlite3_exec之后,执行失败时可以查阅这个指针(直接printf(“%s\n”,errmsg))得到一串字符串信息,这串信息告诉你错在什么地方。sqlite3_exec函数通过修改你传入的指针的指针,把你提供的指针指向错误提示信息,这样sqlite3_exec函数外面就可以通过这个char*得到具体错误提示。 说明:通常,sqlite3_callback和它后面的void*这两个位置都可以填NULL。填NULL表

sqlite 基本操作 全

sqlite3本地数据库学习 sqlite3只是一个轻型的嵌入式数据库引擎,占用资源非常低,处理速度比mysql还快,专门用于移动设备上进行适量的数据存取,它只是个文件,不需要服务器进程。 常用术语:表(table)、字段(colum,列,属性)、记录(row,record) 关键字:select、insert、updete、delete、from、creat、where、desc、order、by、group、table、alter、view、index等。 1、安装sqlite3 sudo()apt-get()install()sqlite3 2、存储类型 integer 整型:int,shoert,long text 文本字符串:string real 浮点型:float,double blob 二进制 3、字段结束 not null:字段的值不能为空 unique:字段的值必须是唯一的 default:指定字段的默认值 primarykey:主键,用来唯一的标识某条记录,相当于记录的身份证。主键可以是一个或多个字段,应由计算机自动生成和管理。主键字段默认包含了not null和unique两个约束。 autoincrement:当主键是integer类型时,应该增加autoincrement约束,能实现主键值的自动增长。 外键:利用外键可以用来建立表与表之间的联系,一般是一张表的某个字段,引用着另一张表的主键。 4、创建数据库usr.db在当前目录下 sqlite3()usr.db 5、创建表格,表格内容以树状存储 create()table()表名(字段名1()字段类型1,字段名2()字段类型2...) 6、数据库中不能使用关键字命名表和字段,不区分大小写,每条语句后加";"结尾 7、删除表格 drop()table()表名 8、向表格里添加数据 insert()into()表名(字段1,字段2...)values(字段1的值,字段2的值...) 8、修改表中的数据 updata()表名()set()字段1=字段1的值,字段2=字段2的值... //将字段为name全部修改成'Tom' updata()stu()set()name='Tom'; //将字段为id=1001的字段name修改成'Tom' updata()stu()set()name='Tom'()where()id=1001; //将字段为id=1001同时字段name='lisi'的字段name修改成'Tom' updata()stu()set()name='Tom'()where()id=1001()and()name='lisi'; 9、删除表中的数据

全面质量管理的常用方法一

全面质量管理的常用方法一 【本讲重点】 排列图 因果分析法 对策表方法 分层法 相关图法 排列图法 什么是排列图 排列图又叫巴雷特图,或主次分析图,它首先是由意大利经济学家巴雷特(Pareto)用于经济分析,后来由美国质量管理专家朱兰(J.M.Juran)将它应用于全面质量管理之中,成为全面质量管理常用的质量分析方法之一。 排列图中有两个纵坐标,一个横坐标,若干个柱状图和一条自左向右逐步上升的折线。左边的纵坐标为频数,右边的纵坐标为频率或称累积占有率。一般说来,横坐标为影响产品质量的各种问题或项目,纵坐标表示影响程度,折线为累计曲线。 排列图法的应用实际上是建立在ABC分析法基础之上的,它将现场中作为问题的废品、缺陷、毛病、事故等,按其现象或者原因进行分类,选取数据,根据废品数量和损失金额多少排列顺序,然后用柱形图表示其大小。因此,排列图法的核心目标是帮助我们找到影响生产质量问题的主要因素。例如,可以将积累出现的频率百分比累加达到70%的因素成为A类因素,它是影响质量的主要因素。 排列图的绘制步骤 排列图能够从任何众多的项目中找出最重要的问题,能清楚地看到问题的大小顺序,能了解该项目在全

体中所占的重要程度,具有较强的说服力,被广泛应用于确定改革的主要目标和效果、调查产生缺陷及故障的原因。因此,企业管理人员必须掌握排列图的绘制,并将其应用到质量过程中去。 一般说来,绘制排列图的步骤如图7-1所示,即:确定调查事项,收集数据,按内容或原因对数据分类,然后进行合计、整理数据,计算累积数,计算累积占有率,作出柱形图,画出累积曲线,填写有关事项。 图7-1 排列图的绘制步骤 排列图的应用实例 某化工机械厂为从事尿素合成的公司生产尿素合成塔,尿素合成塔在生产过程中需要承受一定的压力,上面共有成千上万个焊缝和焊点。由于该厂所生产的十五台尿素合成塔均不同程度地出现了焊缝缺陷,由此对返修所需工时的数据统计如表7-1所示。 表7-1 焊缝缺陷返修工时统计表 序号项目返修工时fi 频率 pi/% 累计频率 fi/% 类别 1焊缝气孔14860.460.4A 2夹渣5120.881.2A 3焊缝成型差208.289.4B 4焊道凹陷15 6.195.5B 5其他11 4.5100C 合计245100 缝成型差、焊道凹陷及其他缺陷,前三个要素累加起来达到了89.4%。根据这些统计数据绘制出如图7-2所示的排列图:横坐标是所列举问题的分类,纵坐标是各类缺陷百分率的频数。

office办公软件使用技巧大全

办公软件使用技巧 1.同时保存所有打开的Word文档 有时在同时编辑多个Word文档时,每个文件要逐一保存,既费时又费力,有没有简单的方法呢?在按下Shift键的同时,单击“文件”菜单,大家看,已经多出了“同时保存”和“同时关闭”命令,这可就方便多了 2.巧妙设置文档保护 在用Word 2000/XP打印一份文件时,忽然头儿有要事吩咐,要暂时离开一下,关闭文件吧,既费事又没必要,但又不想辛辛苦苦写的文件被别人破坏了。怎么办呢?执行“工具”菜单中的“保护文档”命令,在弹出的窗口中选择“保护窗体”,然后设上密码。怎么样,光标跑到了文件头,任你怎么移动鼠标、敲击键盘就是无法编辑了,不错吧。等回来时,执行“工具”菜单中的“解除文档保护”命令,一切又正常了。 3.编辑长文件更轻松 相信大家都有这样的经历:在使用Excel、Word编辑长文档时,有时需要将文章开始的多处内容复制到文章末尾。但通过拖动滚动条来回移动非常麻烦,还会出错。其实只要将鼠标移动到滚动条上面的适当位置,发现鼠标指针变成双箭头,此时按住鼠标左键

向下拖动,文档编辑区会被一分为二。你只需在上面编辑区找到文章开头的内容,在下面编辑区找到需要粘贴的位置,这样你就可以复制内容了,而不必来回切换。这种方法特别适合复制相距很远且处数较多的内容。 4.给WPS文档添加水印 先用作图软件(画笔工具等)制作一张色彩非常淡的图片(直接将Word的水印效果图“抓”下来也行),然后打开需要添加水印的WPS文档,执行“格式→页面背景→设置”命令,打开“设置背景”对话框,切换到“图片”标签下,按“选择图片”按钮,选中刚才制作的图片,并进行适当设置后确定,就可以为文档设置上水印了。5.在金山文字中快速打开“页面设置” 在用金山文字2002处理文档时,一个最常用的操作就是设置页面。先执行“视图→标尺→水平(垂直)标尺”命令,展开“水平(垂直)标尺”打开,然后用鼠标在水平(垂直)标尺上双击,即可快速打开“页面设置”对话框,对页面进行设置了。 6.在Excel中插入拼音 在我们使用Excel时,常常会遇到十分孤僻的字,但加上拼音注释就能使人看得更明白。具体的方法是:选中想要加入拼音注释的表格,打开Excel的菜单栏中的“格式”菜单,选中“拼音信息/设置”

QSQLite 数据库

这里我们只是演示了一下使用这个框架完成最简单的程序的过程,只起到抛砖引玉的作用。这个框架很复杂,但是功能也很强大,Qt Creator中自带了几个相关的例子(在帮助中查找Graphics View Examples即可),你可以参考一下。因为篇幅问题,我们就只讲这么多,如果以后有机会,我会推出一个相关的专题来讲述这个框架。 分类:Qt系列教程作者: yafeilinux 日期:四月 30th, 2010. 3,006 views Tags: 2D绘图, creator, qt, yafeilinux, 教程

二十一、Qt数据库(一)简介 本文章原创于https://www.wendangku.net/doc/7517069157.html,转载请注明出处。 从今天开始我们学习Qt数据库编程的内容。 先说明:我们以后使用现在最新的基于Qt 4.6.2的Qt Creator 1.3.1 Windows版本,该版本是2010年2月17日发布的。 数据库几乎是每个较大的软件所必须应用的,而在Qt中也使用QtSql模块实现了对数据库的完美支持。我们在Qt Creator的帮助中查找QtSql Module,其内容如下图: 可以看到这个模块是一组类的集合,使用这个模块我们需要加入头文件#include ,而在工程文件中需要加入一行代码:QT += sql 这里每个类的作用在后面都有简单的介绍,你也可以进入其中查看其详细内容。下面我们先简单的说一下QSqlDatabase类和QSqlQuery类。 QSqlDatabase类实现了数据库连接的操作,现在Qt支持的数据库类型有如下几种: 而现在我们使用的免费的Qt只提供了SQLite和ODBC数据库的驱动(我们可以在Qt Creator 安装目录下的qt\plugins\sqldrivers文件夹下查看),而其他数据库的驱动需要我们自己添加。SQLite是一个小巧的嵌入式数据库,关于它的介绍你可以自己在网上查找。 QSqlQuery类用来执行SQL语句。(关于SQL语句:在我的教程中只会出现很简单的SQL语句,你没有相关知识也可以看懂,但是如果想进行深入学习,就需要自己学习相关知识了。)

SQLITE最基本操作

SQLite数据库的基本操作 main.xml(主布局)

android:orientation="vertical">

office使用窍门-office办公软件使用技巧大全

office办公软件使用技巧大全 1. 对Excel中的数据四舍五入 在Excel中的“四舍五入”函数—ROUND函数,它可以返回某个数值按指定位数四舍五入后的数值。只要在Excel提供的“数学与三角函数”中找到这个名为ROUND(number,num_digits)的函数。这个函数有两个参数,分别是number和num_digits。其 中number就是将要进行四舍五入的数值(或用公式计算的结果);num_digits则是希望得到的数值的小数点后的位数。 2. 让Word也能编辑WPS文件 目前,在中国大陆使用得最广泛的办公软件当数Word和WPS 了。然而这为资源的共享带来了一定的问题。如果想用Wordz编辑WPS文档,你得首先安装WPS文件转换器安装程序。该安装程序可在https://www.wendangku.net/doc/7517069157.html,/softwareview.asp?softwareid=13925下载。双击安装该转换器,就可以使Word打开WPS文件格式。 在Word97/2000中测试成功。 鼠标点击选文的秘密 3. Word文档中将鼠标挪至屏幕左侧空白处,鼠标会由“I”形变为一个向右的斜箭头,单击,可选择一行;双击,可选择一段;三击,可全选。三击鼠标,对大多数人来说,还比较陌生,但很方便,你不妨一试。当然,全选有很多种方法,你可以按住鼠标左键拖曳至所需之处。你还可以用“Ctrl+A”,你也可以点击“编辑”菜单,选择“全选”。如果鼠标在段落中,双击,可选择一个词;三击,可选择这一段。 4. 高效跨页选取段落

许多人翻页会采取拖曳的方式,因不容易控制,往往很难做到准确。其实界面的最下面一行,有几个按钮,“录制”、“修订”、“扩展”、“改写”,平时总是灰色的,要应用它,必须双击使之变黑。要跨页选取段落,先单击你要选取的起始点,再将“扩展”激活,然后翻页找到你需要的终点,单击,这中间一大块就以反白的形式选择好了。如果想追加选择,不断地点击下去就是了,不必从头再来。还有一种更为简单的方法:单击要选取的段落的起点,翻页找到终点,按住Shift键再单击鼠标,即可以准确地选中你所需的部分。 Word计量单位“磅”变“厘米” 5. 平时我们大家在办公用Word的时候,是不是发现表格属性全都是以“磅”为单位的。这根本不符合中国的习惯和标准要求。要修改它先是点击“工具”菜单,然后选择“选项”栏,在弹出的对话框中点击“常规”选项,将计量单位改为“厘米”即可。 6. Excel中同时设置多个工作表单 使用Excel进行表单及数据的处理,常遇有许多工作表需要同时改变相同属性的情况。我们将鼠标置于工作表的切换窗口,点击右键,在弹出菜单项中选择“选定全部工作表”,其间所作设置会在“工作组”中令所有工作表生效。如果你所处理的表格为相同的格式,也可同时添加或删除相同的行和列,表格中对应的行或列的数值、内容也可进行设定,甚至对相同单元格中应用函数(公式)也能全部进行更改和替换。 7. 保持文档中图表的完整

Unity3D教程:Unity3D与Sqlite数据库直连

Unity3D教程:Unity3D与Sqlite数据库直连 Posted on 2013年01月10日 by U3d / Unity3D 基础教程/被围观 475 次环境介绍: Windows7,Unity3D,SQLite Expert Personal 3 开发语言: JavaScript 需要的dll文件: Mono.Data.Sqlite.dll和sqlite3.dll,dll文件位置,截图: Unity3D教程:Unity3D与Sqlite数据库直连一定要在这个目录下,请保持一致。 如果需要将编译好的程序发布成功的话,需要改一些地方,具体见下面的截图:

Unity3D教程:Unity3D与Sqlite数据库直连 要改动的地方已用红色标记,注意这个要改成.NET2.0,这样才能够发布的。系统默认的不是.NET2.0,这一点要注意!!! 下面来看下代码吧,先看下如何创建数据库的代码,这一篇代码是不用挂到任何对象上面去的,你只用把它当成一个工具即可。如下所示: /* Javascript class for accessing SQLite objects. To use it, you need to make sure you COPY Mono.Data.SQLiteClient.dll from wherever it lives in your Unity directory

to your project's Assets folder Originally created by dklompmaker in 2009 https://www.wendangku.net/doc/7517069157.html,/threads ... sier-Database-Stuff Modified 2011 by Alan Chatham */ //#pragma strict /* 代码描述 *本代码是为了在Windows环境下运行unity3d和Sqlite数据库而写的;实现的基本功能是unity3d能够与数据库之间进行基本的通信,比如说:在数据库中的数据被改变了以后,unity3d中得到的数据也会在刷新了之后跟着改变;这只是一个基本的核心的技术,为的是能够应用在大型的unity3d项目中,能够存储场景中的项目的属性,在需要改变对象的属性或增加、减少等对象时能够很方便的用得上。要实现本代码。首先需要一些dll文件,一个是Mono.Data.SQLiteClient.dll,另外一个是sqlite3.dll,这些文件都能够在unity3d的安装目录中找得到。除此之外,还需要把这两个文件放在你的项目的这个路径下面:\Assets\Plugins\,没有Plugins文件夹就必须创建这个文件夹,然后将这两个dll文件放在该文件夹写。当然,如果你想能够在PC上面发布成可执行文件,还需要改动

SQLite3 API使用大全

SQLite3API使用大全E-mail:18918737 (at) qq dot com,智有不明

前序: (1) 一、版本 (1) 二、基本编译 (2) 三、 SQLITE操作入门 (2) (1)基本流程 (2) (2) SQL语句操作 (4) (3)操作二进制 (8) (4)事务处理 (10) 四、给数据库加密 (10) 五、后记 (25) 前序: Sqlite3 的确很好用。小巧、速度快。但是因为非微软的产品,帮助文档总觉得不够。这些天再次研究它,又有一些收获,这里把我对 sqlite3 的研究列出来,以备忘记。 这里要注明,我是一个跨平台专注者,并不喜欢只用 windows 平台。我以前的工作就是为unix 平台写代码。下面我所写的东西,虽然没有验证,但是我已尽量不使用任何 windows 的东西,只使用标准 C 或标准C++。但是,我没有尝试过在别的系统、别的编译器下编译,因此下面的叙述如果不正确,则留待以后修改。 下面我的代码仍然用 VC 编写,因为我觉得VC是一个很不错的IDE,可以加快代码编写速度(例如配合 Vassist )。下面我所说的编译环境,是VC2003。如果读者觉得自己习惯于 unix 下用 vi 编写代码速度较快,可以不用管我的说明,只需要符合自己习惯即可,因为我用的是标准 C 或 C++ 。不会给任何人带来不便。 一、版本 从https://www.wendangku.net/doc/7517069157.html,网站可下载到最新的 sqlite 代码和编译版本。我写此文章时,最新代码是 3.3.17 版本。 很久没有去下载 sqlite 新代码,因此也不知道 sqlite 变化这么大。以前很多文件,现在全部合并成一个 sqlite3.c 文件。如果单独用此文件,是挺好的,省去拷贝一堆文件还担心有没有遗漏。但是也带来一个问题:此文件太大,快接近7万行代码,VC开它整个机器都慢下来了。如果不需要改它代码,也就不需要打开 sqlite3.c 文件,机器不会慢。但是,下面我要写通过修改 sqlite 代码完成加密功能,那时候就比较痛苦了。如果个人水平较高,建议用些简单的编辑器来编辑,例如 UltraEdit 或 Notepad 。速度会快很多。 二、基本编译 这个不想多说了,在 VC 里新建 dos 控制台空白工程,把 sqlite3.c 和 sqlite3.h 添加到工程,再新建一个 main.cpp 文件。在里面写: extern "C" { #include "./sqlite3.h" }; int main( int , char** ) { return 0; }

SQLite Expert Personal使用教程

小蛙今天要介紹一套圖形化的SQLite管理軟體,目前像Android, iOS … 等手持式裝置內部都支援使用SQLite,不外乎是因為它方便、小、速度快,SQLite不像一般MySQL、Oracle、MSSQL這麼複雜,我們可以把SQLite想像成一個檔案(實際上存好之後也只有一個檔案),但這一個檔案又比Microsoft Access有更大的便利性(可以在很多平台使用,不會只鎖定微軟平台),想更了解SQLite可以參考、或者是。是小蛙今天要介紹的軟體,它不只可以瀏覽SQLite內儲存的資料,同時也可以進行新增、修改、刪除…等操作,就像官網首頁寫的「SQLite Expert: A powerful administration tool for your SQLite databases」。 注意:這篇文章主要是以圖形化工具操作SQLite,並不會讓你學到SQLite指令操作。 先到官網下載SQLite Expert Personal免費版,上面的是專業版,只能試用30天,那小蛙只是需要一些資料庫基本操作,選擇下面的License是Freeware的個人免費版。下載完之後安裝,預設一直下一步直到安裝完成。 安裝完成後執行SQLite Expert Personal,在桌面可以看到圖示,如果沒有的話到開始所有程式(程式集)裡面去找「SQLite Expert」,點兩下執行。

啟動之後我們必須先建立一個新的資料庫,點選左上角紅色框框新增資料庫,並且輸入相關設定。 新增完資料庫後,畫面左邊可以看到小蛙剛剛新增的資料庫「postman」,在資料庫上點選滑鼠右鍵,選擇「New Table」來新增需要的表單。

全面质量管理的基本方法

第二章全面质量管理的基本方法 第一节PDCA循环法 一、计划-执行-检查-总结 制定计划(方针、目标) 执行(组织力量去实施) 检查(对计划执行的情况进行检查) 总结(总结成功的经验,形成标准,或找出失败原因重新制定计划) PDCA循环法的特点: 1. 四个顺序不能颠倒,相互衔接 2. 大环套小环,小环保大环,互相促进 3. 不停地转动,不断地提高 4. 关键在于做好总结这一阶段 二、解决和改进质量问题的八个步骤 1. 找出存在的问题 2. 分析产生问题的原因 3. 找出影响大的原因 4. 制定措施计划 5. 执行措施计划 6. 检查计划执行情况 7. 总结经验进行处理 8. 提出尚未解决的问题 第二节质量管理的数理统计方法 一、质量管理数理统计方法的特点和应用条件 1. 特点 (1)抽样检查 (2)伴随生产过程进行 (3)可靠直观 2. 质量管理数理统计方法的优点 (1)防止废次品产生(防患于未然) (2)积累资料,为挖掘提高产品质量的潜力创造了可能 (3)为制定合理的技术标准和工艺规程提供可靠数据 (4)减少了检验工作量,提高了检验的准确性与效率,节省了开支 3. 质量管理数理统计方法的应用条件 (1)必须具备相对稳定的生产过程(完备的工艺文件、操作规程,严格的工艺纪律、岗位责任制,完好状态的设备等) (2)培训人员,掌握方法,明确意义 (3)领导重视,创造条件给予支持 (4)各职能部门互相配合,齐心协力 二、质量管理数理统计方法的基本原理 随机现象和随机事件 频数、频率和概率 概率的几个性质 产品质量变异和产生变异的原因:

1. 偶然性原因(随机误差) 对质量波动影响小,特点是大小、方向都不一定,不能事先确定它的数值。 2. 系统性原因(条件误差) 对质量波动影响大,特点是有规律、容易识别,可以避免。 随机误差与条件误差是相对的,在一定条件下,前者可变为后者。 观察和研究质量变异,掌握质量变异的规律是质量控制的重要内容。对影响质量波动的因素应严格控制。 三、质量管理中的数据 母体(总体N )–提供数据的原始集团 子样(样品n)–从母体中抽出来的一部分样品(n ≥1) 抽样- 从母体中随机抽取子样的活动 1. 数据的收集过程 (1)工序控制半成品→子样→数据 (2)产品检验产品→子样→数据 (3)子样的抽取方法 ①随机抽样(抽签法、随机表法) 机会均等,子样代表性强,多用于产品验收 ②按工艺过程、时间顺序抽样 等间距抽取若干件样品 2. 数据的种类 (1)计量值数据 连续性数据,可以是小数,如:长度、重量 (2)计数值数据 非连续性数据,不能是小数 ①计件数据(不合格数) (统计分析方法和控制图) 生产过程质量数据信息质量控制 分析整理

PHP进行SQLite实例教程

PHP进行SQLite实例教程 PHP进行SQLite实例教程文章录入:https://www.wendangku.net/doc/7517069157.html, 责任编辑:https://www.wendangku.net/doc/7517069157.html, 63【字体:小大】本教程将向你介绍SQLite API所支持的重要方法,提供一个能够用在你开发中的简单脚本模板,从而告诉你如何使用PHP与SQLite数据库进行交互操作。本文假设你已经安装好了Apache和PHP。 你的系统上并不是一定非要安装可交互的SQLite 程序;但是为了能够简化创建本教程所需要的一系列初始表格,你应该下载和安装这个程序。然后,为你的SQL查询创建一个示例表格,方法是创建一个空白的文本文件,将该文件名作为下列命令(列表A)的参数在交互命令提示符下执行二进制程序: sqlite> CREATE TABLE users (id INTEGER PRIMARY KEY, username TEXT, country TEXT); sqlite> INSERT INTO users VALUES (1, 'john', 'IN'); sqlite> INSERT INTO users VALUES (2, 'joe', 'UK'); sqlite> INSERT INTO users VALUES (3, 'diana', 'US');一旦表格创建好了,下面就是使用PHP的SQLite方法建立一个脚本模板。 <?php

// set access parameters $db = "users.db"; // open database file // make sure script has read/write permissions! $conn = sqlite_open($db) or die ("ERROR: Cannot open database"); // create and execute INSERT query $sql = "INSERT INTO users (id, username, country) VALUES ('5', 'pierre', 'FR')"; sqlite_query($conn, $sql) or die("Error in query execution: " . sqlite_error_string(sqlite_last_error($conn))); // create and execute SELECT query $sql = "SELECT username, country FROM users"; $result = sqlite_query($conn, $sql) or die("Error in query execution: " . sqlite_error_string(sqlite_last_error($conn))); // check for returned rows // print if available if (sqlite_num_rows($result) > 0) { while($row = sqlite_fetch_array($result)) { echo $row[0] . " (" . $row[1] . ") "; } }

sqlite3的数据类型详解

sqlite3中的数据类型 大多数的数据库引擎(到现在据我们所知的除了sqlite的每个sql数据库引擎)都使用静态的、刚性的类型,使用静态类型,数据的类型就由它的容器决定,这个容器是这个指被存放的特定列。 Sqlite使用一个更一般的动态类型系统,sqlite中,值的数据类型跟值本身相关,而不是与它的容器相关。Sqlite的动态类型系统和其他数据库的更为一般的静态类型系统相兼容,但同时,sqlite中的动态类型允许它能做到一些传统刚性类型数据库所不可能做到的事。 1.存储类和数据类型 每个存放在sqlite数据库中(或者由这个数据库引擎操作)的值都有下面中的一个存储类: ●NULL,值是NULL ●INTEGER,值是有符号整形,根据值的大小以1,2,3,4,6或8字节存放 ●REAL,值是浮点型值,以8字节IEEE浮点数存放 ●TEXT,值是文本字符串,使用数据库编码(UTF-8,UTF-16BE或者UTF-16LE) 存放 ●BLOB,只是一个数据块,完全按照输入存放(即没有准换) 从上可以看出存储类比数据类型更一般化。比如INTEGER存储类,包括6中不同长度的不同整形数据类型,这在磁盘上造成了差异。但是只要INTEGER值被从磁盘读出进入到内存进行处理,它们被转换成最一般的数据类型(8-字节有符号整形)。 Sqlite v3数据库中的任何列,除了整形主键列,可以用于存储任何一个存储列的值。sql语句中的中所有值,不管它们是嵌入在sql文本中或者是作为参数绑定到一个预编译的sql语句,它们的存储类型都是未定的。在下面描述的情况中,数据库引擎会在查询执行过程中在数值(numeric)存储类型(INTEGER和REAL)和TEXT 之间转换值。 1.1布尔类型 Sqlite没有单独的布尔存储类型,它使用INTEGER作为存储类型,0为false,1为true 1.2 Date和Time Datatype Sqlite没有另外为存储日期和时间设定一个存储类集,内置的sqlite日期和时间函数能够将日期和时间以TEXT,REAL或INTEGER形式存放 ●TEXT 作为IS08601字符串("YYYY-MM-DD HH:MM:SS.SSS") ●REAL 从格林威治时间11月24日,4174 B.C中午以来的天数 ●INTEGER 从 1970-01-01 00:00:00 UTC以来的秒数 程序可以任意选择这几个存储类型去存储日期和时间,并且能够使用内置的日期和时间函数在这些格式间自由转换 2.0 类型近似

相关文档