`
chinamming
  • 浏览: 151369 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

SQlite数据库的C编程接口(二) 数据库连接 ——《Using SQlite》读书笔记

 
阅读更多

SQlite数据库的C编程接口(二) 数据库连接 by斜风细雨QQ:253786989 2012-02-03

库初始化

  1. intsqlite3_initialize(void);
  2. intsqlite3_shutdown(void);

在使用SQliteLibrary之前,首先应该调用sqlite3_initialize函数,该函数将分配资源,初始化一些必要的数据结构。与之配合使用的另一个函数是sqlite3_shutdown,该函数用来释放由sqlite3_initialize分配的资源。不过在很多客户的应用程序中通常直接调用sqlite3_open或者另一些主要的API函数,这些函数会自动初始化SQlitelibrary(如果它还没有被初始化的话)。不过还是推荐客户应用程序显示调用这两个APIs函数来完成SQlitelibrary的初始化和最后的清理工作。

打开数据库

  1. intsqlite3_open(
  2. constchar*filename,/*Databasefilename(UTF-8)*/
  3. sqlite3**ppDb/*OUT:SQLitedbhandle*/
  4. );
  5. intsqlite3_open16(
  6. constvoid*filename,/*Databasefilename(UTF-16)*/
  7. sqlite3**ppDb/*OUT:SQLitedbhandle*/
  8. );
  9. intsqlite3_open_v2(
  10. constchar*filename,/*Databasefilename(UTF-8)*/
  11. sqlite3**ppDb,/*OUT:SQLitedbhandle*/
  12. intflags,/*Flags*/
  13. constchar*zVfs/*NameofVFSmoduletouse*/
  14. );

在执行任何SQL语句之前,必须首先连接到一个数据库,也就是打开或者新建一个SQlite3数据库文件。连接数据库由sqlite3_open函数完成,它一共有上面3个版本。其中sqlite3_open函数假定SQlite3数据库文件名为UTF-8编码,sqlite3_open_v2是它的加强版。sqlite3_open16函数假定SQlite3数据库文件名为UTF-16Unicode宽字符)编码。

所有这三个函数,参数filename是要连接的SQlite3数据库文件名字符串。参数ppDb看起来有点复杂,它是一个指向指针的指针。当调用sqlite3_open_xxx函数时,该函数将分配一个新的SQlite3数据结构,然后初始化,然后将指针ppDb指向它。所以客户应用程序可以通过sqlite3_open_xxx函数连接到名为filename的数据库,并通过参数ppDb返回指向该数据库数据结构的指针。

示例代码:

  1. sqlite3*pDB=NULL;
  2. Statusrc=sqlite3_open("database.sqlite3",&pDB);

对于sqlite3_opensqlite3_open16函数,如果可能将以可读可写的方式打开数据库,否则以只读的方式打开数据库。如果要打开的数据库文件不存在,就新建一个。对于sqlite3_open_v2函数,情况就要复杂一些了,因为这个v2版本的函数强大就强大在它可以对打开(连接)数据库的方式进行控制,具体是通过它的参数flags来完成。sqlite3_open_v2函数只支持UTF-8编码的SQlite3数据库文件。

如flags设置为SQLITE_OPEN_READONLY,则SQlite3数据库文件以只读的方式打开,如果该数据库文件不存在,则sqlite3_open_v2函数执行失败,返回一个error。如果flags设置为SQLITE_OPEN_READWRITE,则SQlite3数据库文件以可读可写的方式打开,如果该数据库文件本身被操作系统设置为写保护状态,则以只读的方式打开。如果该数据库文件不存在,则sqlite3_open_v2函数执行失败,返回一个error。如果flags设置为SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE,则SQlite3数据库文件以可读可写的方式打开,如果该数据库文件不存在则新建一个。这也是sqlite3_opensqlite3_open16函数的默认行为。除此之外,flags还可以设置为其他标志,具体可以查看SQlite官方文档。

参数zVfs允许客户应用程序命名一个虚拟文件系统(VirtualFileSystem)模块,用来与数据库连接。VFS作为SQlitelibrary和底层存储系统(如某个文件系统)之间的一个抽象层,通常客户应用程序可以简单的给该参数传递一个NULL指针,以使用默认的VFS模块。

对于UTF-8编码的SQlite3数据库文件,推荐使用sqlite3_open_v2函数进行连接,它可以对数据库文件的打开和处理操作进行更多的控制。

SQlite3数据库文件的扩展名没有一个标准定义,比较流行的选择是.sqlite3、.db、.db3。不过在Windows系统平台上,不推荐使用.sdb作为SQlite3数据库文件的扩展名,据说这会导致IO速度显著减慢,因为.sdb扩展名有其特殊用义。

关闭数据库

  1. intsqlite3_close(sqlite3*);

在使用完SQlite数据库之后,需要调用sqlite3_close函数关闭数据库连接,释放数据结构所关联的内存,删除所有的临时数据项。如果在调用sqlite3_close函数关闭数据库之前,还有某些没有完成的(nonfinalized)SQL语句,那么sqlite3_close函数将会返回SQLITE_BUSY错误。客户程序员需要finalize所有的预处理语句(preparedstatement)之后再次调用sqlite3_close

示例代码

  1. #include"sqlite3.h"
  2. #include<stdlib.h>
  3. intmain(intargc,char**argv)
  4. {
  5. Char*file="database.sqlite3";
  6. sqlite3*pDB=NULL;
  7. intrc=0;
  8. sqlite3_initialize();
  9. rc=sqlite3_open_v2(file,&db,SQLITE_OPEN_READWRITE|
  10. SQLITE_OPEN_CREATE,NULL);
  11. if(rc!=SQLITE_OK)
  12. {
  13. sqlite3_close(db);
  14. exit(-1);
  15. }
  16. /*performdatabaseoperations*/
  17. sqlite3_close(db);
  18. sqlite3_shutdown()
  19. }

SQlite数据库的C编程接口(二) 数据库连接 by斜风细雨QQ:253786989 2012-02-03

SQlite数据库的C编程接口(二) 数据库连接 by斜风细雨QQ:253786989 2012-02-03

库初始化

  1. intsqlite3_initialize(void);
  2. intsqlite3_shutdown(void);

在使用SQliteLibrary之前,首先应该调用sqlite3_initialize函数,该函数将分配资源,初始化一些必要的数据结构。与之配合使用的另一个函数是sqlite3_shutdown,该函数用来释放由sqlite3_initialize分配的资源。不过在很多客户的应用程序中通常直接调用sqlite3_open或者另一些主要的API函数,这些函数会自动初始化SQlitelibrary(如果它还没有被初始化的话)。不过还是推荐客户应用程序显示调用这两个APIs函数来完成SQlitelibrary的初始化和最后的清理工作。

打开数据库

  1. intsqlite3_open(
  2. constchar*filename,/*Databasefilename(UTF-8)*/
  3. sqlite3**ppDb/*OUT:SQLitedbhandle*/
  4. );
  5. intsqlite3_open16(
  6. constvoid*filename,/*Databasefilename(UTF-16)*/
  7. sqlite3**ppDb/*OUT:SQLitedbhandle*/
  8. );
  9. intsqlite3_open_v2(
  10. constchar*filename,/*Databasefilename(UTF-8)*/
  11. sqlite3**ppDb,/*OUT:SQLitedbhandle*/
  12. intflags,/*Flags*/
  13. constchar*zVfs/*NameofVFSmoduletouse*/
  14. );

在执行任何SQL语句之前,必须首先连接到一个数据库,也就是打开或者新建一个SQlite3数据库文件。连接数据库由sqlite3_open函数完成,它一共有上面3个版本。其中sqlite3_open函数假定SQlite3数据库文件名为UTF-8编码,sqlite3_open_v2是它的加强版。sqlite3_open16函数假定SQlite3数据库文件名为UTF-16Unicode宽字符)编码。

所有这三个函数,参数filename是要连接的SQlite3数据库文件名字符串。参数ppDb看起来有点复杂,它是一个指向指针的指针。当调用sqlite3_open_xxx函数时,该函数将分配一个新的SQlite3数据结构,然后初始化,然后将指针ppDb指向它。所以客户应用程序可以通过sqlite3_open_xxx函数连接到名为filename的数据库,并通过参数ppDb返回指向该数据库数据结构的指针。

示例代码:

  1. sqlite3*pDB=NULL;
  2. Statusrc=sqlite3_open("database.sqlite3",&pDB);

对于sqlite3_opensqlite3_open16函数,如果可能将以可读可写的方式打开数据库,否则以只读的方式打开数据库。如果要打开的数据库文件不存在,就新建一个。对于sqlite3_open_v2函数,情况就要复杂一些了,因为这个v2版本的函数强大就强大在它可以对打开(连接)数据库的方式进行控制,具体是通过它的参数flags来完成。sqlite3_open_v2函数只支持UTF-8编码的SQlite3数据库文件。

如flags设置为SQLITE_OPEN_READONLY,则SQlite3数据库文件以只读的方式打开,如果该数据库文件不存在,则sqlite3_open_v2函数执行失败,返回一个error。如果flags设置为SQLITE_OPEN_READWRITE,则SQlite3数据库文件以可读可写的方式打开,如果该数据库文件本身被操作系统设置为写保护状态,则以只读的方式打开。如果该数据库文件不存在,则sqlite3_open_v2函数执行失败,返回一个error。如果flags设置为SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE,则SQlite3数据库文件以可读可写的方式打开,如果该数据库文件不存在则新建一个。这也是sqlite3_opensqlite3_open16函数的默认行为。除此之外,flags还可以设置为其他标志,具体可以查看SQlite官方文档。

参数zVfs允许客户应用程序命名一个虚拟文件系统(VirtualFileSystem)模块,用来与数据库连接。VFS作为SQlitelibrary和底层存储系统(如某个文件系统)之间的一个抽象层,通常客户应用程序可以简单的给该参数传递一个NULL指针,以使用默认的VFS模块。

对于UTF-8编码的SQlite3数据库文件,推荐使用sqlite3_open_v2函数进行连接,它可以对数据库文件的打开和处理操作进行更多的控制。

SQlite3数据库文件的扩展名没有一个标准定义,比较流行的选择是.sqlite3、.db、.db3。不过在Windows系统平台上,不推荐使用.sdb作为SQlite3数据库文件的扩展名,据说这会导致IO速度显著减慢,因为.sdb扩展名有其特殊用义。

关闭数据库

  1. intsqlite3_close(sqlite3*);

在使用完SQlite数据库之后,需要调用sqlite3_close函数关闭数据库连接,释放数据结构所关联的内存,删除所有的临时数据项。如果在调用sqlite3_close函数关闭数据库之前,还有某些没有完成的(nonfinalized)SQL语句,那么sqlite3_close函数将会返回SQLITE_BUSY错误。客户程序员需要finalize所有的预处理语句(preparedstatement)之后再次调用sqlite3_close

示例代码

  1. #include"sqlite3.h"
  2. #include<stdlib.h>
  3. intmain(intargc,char**argv)
  4. {
  5. Char*file="database.sqlite3";
  6. sqlite3*pDB=NULL;
  7. intrc=0;
  8. sqlite3_initialize();
  9. rc=sqlite3_open_v2(file,&db,SQLITE_OPEN_READWRITE|
  10. SQLITE_OPEN_CREATE,NULL);
  11. if(rc!=SQLITE_OK)
  12. {
  13. sqlite3_close(db);
  14. exit(-1);
  15. }
  16. /*performdatabaseoperations*/
  17. sqlite3_close(db);
  18. sqlite3_shutdown()
  19. }

SQlite数据库的C编程接口(二) 数据库连接 by斜风细雨QQ:253786989 2012-02-03

分享到:
评论

相关推荐

    SQLite数据库C语言编程的demo示例

    内容概要:这是一个通过显式调用(dlopen)方式,使用SQLite库API函数C语言编程的demo示例。里面包含了SQLite数据库文件的创建、数据库表创建、插入、修改、删除、查询等功能操作。该资源包中的程序有在Ubuntu环境下...

    基于Qt4的SQLite数据库应用编程

    标题“基于Qt4的SQLite数据库应用编程”揭示了文档将要介绍的知识点,即如何在Qt4框架下进行SQLite数据库的应用编程。从描述中我们知道,Qt是一个由挪威TrollTech公司开发的C++图形用户界面应用程序框架,支持跨平台...

    基于Qt4的SQLite数据库应用编程.pdf

    2. **SQL接口层(应用编程层)**:这一层提供了数据库访问的高级接口,其中QSqlDatabase用于管理数据库连接,QSqlQuery用于执行SQL查询,QSqlError用于处理错误,QSqlField定义字段属性,QSqlTableModel和QSqlRecord...

    VB6.0 操作SQLite 数据库的完整示例代码

    在VB6.0中操作SQLite数据库,是一种将轻量级、高性能的SQLite数据库与传统的Visual Basic编程环境相结合的方法。SQLite是一种自包含、无服务器、零配置、事务性的SQL数据库引擎,广泛应用于移动设备、嵌入式系统以及...

    使用C#开发的Sqlite数据库创建、操作的源码项目工程

    ①可以获取到关于Sqlite数据库的2种常用连接字符串【不加密、加密】(也可以自己传入); ②可以代码直接创建Sqlite数据库; ③可以直接创建Sqlite数据库的表; ④实现了通用的sql语句执行帮助类(包含单条数据的...

    Android实验报告Sqlite数据库操作.pdf

    Android SQLite 数据库操作报告 一、实验目的 Android 实验报告的主要目的是熟悉 Android 平台的文件操作、掌握 Android SQLite 数据库的设计和应用、熟悉 XML 和 JSON 文件的读取。通过本实验,用户可以掌握 ...

    SQLite数据库 加密解密工具

    SQLite数据库是一种轻量级、自包含的SQL数据库引擎,常被用在嵌入式系统和移动应用中。在处理敏感数据时,为了保护信息安全,对SQLite数据库进行加密是必要的步骤。本文将详细介绍如何使用.NET环境下的SQLite加密...

    Delphi版SQLite数据库工具

    Delphi版SQLite数据库工具是一款专为开发者设计的实用软件,主要用于在Delphi编程环境中与SQLite数据库进行交互。SQLite是一款轻量级、自包含的数据库引擎,广泛应用于嵌入式系统和移动应用,因其高效性和无需服务器...

    js 访问 sqlite数据库

    1. **Web SQL Database**(不推荐):这是W3C曾经提出的一个标准,允许在Web应用中使用SQLite数据库。开发者可以通过SQL语法直接操作数据库。但请注意,这个标准已被废弃,不再推荐使用。 2. **IndexedDB**:这是一...

    ASP+sqlite 数据库连接代码案例

    在ASP中连接SQLite数据库,可以帮助开发者在不依赖大型数据库系统的情况下,实现数据存储和管理。 首先,我们需要了解如何在ASP中引入SQLite的驱动。由于ASP本身并不直接支持SQLite,所以我们需要借助第三方组件,...

    pb9通过odbc连接sqlite3数据库

    标题中的“pb9通过odbc连接sqlite3数据库”是指使用PowerBuilder 9(简称pb9)这个编程环境,通过开放数据库连接(ODBC)技术来访问SQLite 3数据库。这是一项重要的技能,尤其是在需要在不同数据库系统间进行数据...

    VB 6.0操作Sqlite数据库(查询、添加、更新、删除)

    在VB 6.0中操作SQLite数据库涉及到一系列的步骤和技术,包括连接数据库、执行SQL语句(查询、添加、更新和删除数据)以及处理结果。SQLite是一个轻量级的、自包含的数据库引擎,适用于各种应用程序,特别是那些需要...

    Android源码——数据库SQLite.zip

    这个压缩包文件"Android源码——数据库SQLite.zip"可能包含了关于Android中SQLite数据库的源码分析、使用示例以及相关的图像资源,如1-120912223R80-L.png,可能用于解释或展示SQLite在Android中的工作原理。...

    SQLiteCompareSetup(SQLite数据库比较工具)

    SQlite数据库工具 供比较两个SQLite数据库所用。

    SQLite数据库打开工具

    SQLite是一款轻量级的、开源的、自包含的SQL数据库引擎,它不需要单独的服务器进程,可以直接嵌入到各类应用程序中。SQLite具有高度移植性,支持多种操作系统和编程语言,如Windows、Linux、Mac OS、Java、C++、...

    全国省市区sqlite数据库

    此外,因为SQLite支持多种编程语言的接口,如Python、Java、C#等,所以可以方便地将这个数据库集成到各种软件项目中。 为了进一步处理和分析这些数据,你可能需要了解如何使用SQLite命令行工具,或者在编程环境中...

    SQLite数据库逆向分析1

    SQLite数据库逆向分析 SQLite数据库逆向分析是一门复杂的技术领域,涉及到软件逆向分析、数据库逆向分析、反汇编、反编译等技术领域。以下为本节课的知识点总结: 1. SQLite数据库逆向分析简介 SQLite数据库逆向...

    Linux下嵌入式系统中SQlite数据库的应用.pdf

    4. SQLite数据库的编程接口和API 5. SQLite数据库的架构和组成 6. SQLite数据库的虚拟机和后端 7. SQLite数据库的应用场景和优点 8. SQLite数据库在Linux环境下的应用 9. SQLite数据库的CREATE TABLE语句和字段定义 ...

    SQLite 数据库绑定combobox c# windows mobile

    在Windows Mobile平台上开发应用程序时,SQLite数据库经常被用于存储和管理数据,因为它轻量级、高效且无需服务器。本教程将深入探讨如何在C#环境下使用SQLite数据库与ComboBox控件进行交互,帮助开发者实现数据查询...

    Android中SQLite数据库查看工具

    就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。 为什么要用 SQLite? 不需要一个单独的服务器进程或操作的系统(无服务器的)。 SQLite 不...

Global site tag (gtag.js) - Google Analytics