皮皮网

【unity源码太极熊猫】【u3d 赛车游戏源码】【小程序仿今日头条源码】sqlite3源码

来源:php 空间源码 时间:2024-11-15 02:06:52

1.linux中sqlite数据库的源码简单使用
2.如何编译SQLite-How To Compile SQLite
3.Node.js如何对SQLite的async/await封装详解
4.收藏!Python内置的源码轻量级数据库竟如此好用!全网最实用sqlite3实战项目!源码

sqlite3源码

linux中sqlite数据库的源码简单使用

       一、数据库的源码安装

       1. 网络安装:配置好网络源后,使用命令 sudo apt-get install sqlite3 安装。源码unity源码太极熊猫

       2. 使用deb包安装:使用命令 sudo dpkg -i *.deb 安装三个deb包。源码

       3. 使用源码包安装:首先解压文件 tar xzf sqlite-autoconf-.tar.gz,源码然后执行 ./configure,源码接着执行 make && make install。源码

       二、源码SQLite命令

       1. 创建数据库:执行命令 sqlite3 company.db。源码

       2. 帮助:使用命令 .help。源码u3d 赛车游戏源码

       3. 退出:使用命令 .quit。源码

       4. 显示当前数据库文件:使用命令 .database。源码

       5. 显示所有表名:使用命令 .tables。

       6. 查看表结构:使用命令 .schema。

       7. 控制显示格式:使用命令 .mode column 和 .header on。

       三、SQLite数据类型

       数据类型包括:null、integer、real、text、blob。

       表结构包括:行(记录)、小程序仿今日头条源码列(字段)、值(字段值)。

       四、SQL命令

       1. 创建表(主键):使用命令 create table table_name( column1 datatype primary key, column2 datatype, ... columnn datatype, );。

       2. 删除表:使用命令 drop table table_name;。

       3. 插入数据:指定列插入使用命令 insert into table_name (column1, column2, ...columnn) values (value1, value2, ...valuen);,所有列插入使用命令 insert into table_name values (value1,value2,value3,...valuen);。

       4. 查询语句:查询所有使用命令 select * from table_name;,查询指定列使用命令 select column1, column2, ...columnn from table_name;,条件查找使用命令 select * from table_name where ...;。

       5. 删除记录:使用命令 delete from table_name where condition;。

       6. 修改记录:使用命令 update table_name set column1 = value1,小趣好护士网站源码 column2 = value2,..., columnn = valuen where condition;。

       五、Linux编程接口

       1. 打开数据库:使用函数 sqlite3_open(char *path, sqlite3 **db);。

       2. 关闭数据库:使用函数 sqlite3_close(sqlite3 *db);。

       3. 执行SQL语句:使用函数 sqlite3_exec( sqlite3 *db, const char *sql, int (*callback)(void*,int,char**,char**), void *arg, char **errmsg );。

       4. 不使用回调函数执行SQL语句:使用函数 sqlite3_get_table(sqlite3 *db, const char *sql, char ***resultp, int*nrow, int *ncolumn, char **errmsg);。

       学习嵌入式物联网需要全面的知识,选择正确的学习路径至关重要。获取最新、全面的学习资料,可点击链接找小助理免费领取。

如何编译SQLite-How To Compile SQLite

       SQLite是ANSI-C的源代码。在使用之前必须要编译成机器码。这篇文章是用于各种编译SQLite方法的指南。

       è¿™ç¯‡æ–‡ç« ä¸åŒ…含编译SQLite的每个步骤的反馈,那样可能会困难因为每种开发场景都不同。所以这篇文章描述和阐述了编译Sqlite的原则。典型的编译命令已经作为例子提供了,以期望应用开发者能够使用这些例子作为完成他们自己定制的编译过程的的一个指南。换句话说,这篇文章提供了想法和见解,而不是交钥匙的解决方法。

       èžåˆVS单独源文件

       Sqlite是由超过一百个c源码文件以及众多的目录下的脚本构建的。Sqlite的实现是纯粹的ANSI-C,但是许多C语言源代码文件是由辅助的C程序生成或者转换来的,并且AWK,SED和TCL脚本会融合到完成的sqlite库中。对Sqlite构建需要的C程序和转换和创建C语言源码是一个复杂的过程。

       ä¸ºäº†ç®€åŒ–这些,sqlite也通过一个预打包的合并后的源码文件:sqlite3.c。这个合并文件是一个ANSI-C源码实现整个SQLite库的唯一文件。合并后的文件更容易处理。所有的东西都包含在这一个文件里,所以很容易进入一个更大的C或者C++程序的源码树。所有的代码生成和转换步骤都已经实现了,因此没有辅助的C程序需要去配置和变异,也没有脚本需要去运行。并且,因此所有哭都包含在一个翻译单元,编译器可以做更多高级的优化从而提升5%到%的性能。因为这些原因,融合后的源码文件sqlite3.c对所有程序来讲都是值得推荐的。

       æŽ¨èæ‰€æœ‰çš„应用程序使用融合文件。

       ç›´æŽ¥ä»Žå•ç‹¬çš„源码文件中构建sqlite当然可以,但是并不推荐。对一些特殊的应用程序,可能需要修改构建程序去处理使用那些从网站上下载的预构建的源码文件不能完成的情况。对于这些情况,推荐构建和使用一个定制过的合并文件。换句话说,即使一个工程需要以单独的源码文件构建sqlite,仍然推荐使用一个融合后的源码文件作为一个中间步骤。

       ç¼–译命令行接口(CLI)

       æž„建命令行接口需要三个源码文件:

       sqlite3.c:Sqlite融合的源码文件

       sqlite3.h:匹配sqlite3.c以及定义sqlite的c语言接口的头文件

       shell.c:命令行接口程序本身。这个c源码文件包含一个main()的例程和每轮循环的用户输入的提示符并将输入传给sqlite数据库引擎用于处理。

       æ‰€æœ‰çš„上述源码的三个文件都被包含在下载页面的amalgamation tarball中。

       ä¸ºäº†æž„建CLI,简单的将这三个文件放置在相同的目录下然后一起编译他们。用MSVC:

       cl shell.c sqlite3.c -Fesqlite3.exe

       åœ¨unix系统上(或者在windows上用cygwin或者mingw+msys)典型的命令会有些像这样:

       gcc shell.c sqlite3.c -lpthread -ldl

       ä¸ºäº†SQLite线程安全,需要pthreads库。但是因为CLI是一个单线程的,我们可以指示SQLite构建一个非线程安全的库并因此护绿pthreads库:

       gcc -DSQLITE_THREADSAFE=0 shell.c sqlite3.c -ldl

       -ldl库是在支持动态装载时需要,例如sqlite3_load_extension() 接口和load_extension()

        SQL function。如果这些特性都不要求,那么我们也可以使用SQLITE_OMIT_LOAD_EXTENSION编译时间选项忽略他们。

       gcc -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION shell.c sqlite3.c

       æœ‰äººå¯èƒ½æƒ³è¦æä¾›å…¶ä»–的编译时间选项(compile-time options),例如SQLITE_ENABLE_FTS3去全文本搜索或者SQLITE_ENABLE_RTREE用于R*树搜索引擎扩展。而有人将正常指定一些编译优化开关。(预编译的CLI可以从选择sqlite网站上使用“-Os”下载下来)有无数种可能的变数在这里。

       å…³é”®ç‚¹åœ¨è¿™é‡Œï¼šæž„建CLI需要编译一起两个C语言文件。shell.c文件包含入口的定义和用户输入的loop,而sqlite融合文件sqlite3.c包含完整的sqlite库的实现。

       ç¼–译TCL接口

        sqlite的tcl接口是一个小的模块被添加到一般的融合文件中。结果是一个新的融合后的源码文件,称之为“tclsqlite3.c”。这个源码文件是生成一个可以使用TCL

       load命令去加载到一个标准的tclsh或者wish中,或者随着sqlite构建成功生成一个单独唯一的tclsh的共享库所需要的。一个tcl的融合的副本被包含在下载页的TEA

        tarball中作为一个文件。

       ä¸ºäº†ç”Ÿæˆä¸€ä¸ªlinux上的sqlite的TCL-loadable库,下面的命令需要满足:

       gcc -o libtclsqlite3.so -shared tclsqlite3.c -lpthread -ldl -ltcl

       ä¸å¹¸çš„是构建Mac OS X 和 Windows的共享库并不是如此简单。对于这些平台最好使用包含在TEA tarball中的configure脚本和makefile.

       ä¸ºäº†ç”Ÿæˆä¸€ä¸ªå•ç‹¬çš„tclsh,可以用于sqlite静态链接,使用如下的编译器调用:

       gcc -DTCLSH=1 tclsqlite3.c -ltcl -lpthread -ldl -lz -lm

       è¿™é‡Œçš„技巧是-DTCLSH=1选项。sqlite的TCL接口模块包含一个main的过程,用于初始化一个TCL解释器并在以-DTCLSH=1编译后进入到一个命令行loop。上述命令可以工作在Linux和Mac

        OS X,虽然有时可能需要依赖于平台调整库选项以及编译的TCL的哪一个版本。

       æž„建融合文件

       ä¸‹è½½é¡µæä¾›çš„sqlite融合文件的版本对大多数用户来说是足够的。然而,一些工程可能想要或者需要构建他们自己的融合文件。一个常见的构建一个定制的融合文件的理由是为了使用特定的compile-time options来定制sqlite库。回想sqlite融合文件中包含了许多C代码由辅助程序和脚本生成。许多的编译时间选项影响这一成圣代码而且必须在融合文件组装前提供给代码生成器。这一系列必须传给代码生成器的编译时间相关的选项会使得sqlite的发布版本各不相同,但是在写这边文章的时候,代码生成器需要知道的这组选项包括:

       SQLITE_ENABLE_UPDATE_DELETE_LIMIT

       SQLITE_OMIT_ALTERTABLE

       SQLITE_OMIT_ANALYZE

       SQLITE_OMIT_ATTACH

       SQLITE_OMIT_AUTOINCREMENT

       SQLITE_OMIT_CAST

       SQLITE_OMIT_COMPOUND_SELECT

       SQLITE_OMIT_EXPLAIN

       SQLITE_OMIT_FOREIGN_KEY

       SQLITE_OMIT_PRAGMA

       SQLITE_OMIT_REINDEX

       SQLITE_OMIT_SUBQUERY

       SQLITE_OMIT_TEMPDB

       SQLITE_OMIT_TRIGGER

       SQLITE_OMIT_VACUUM

       SQLITE_OMIT_VIEW

       SQLITE_OMIT_VIRTUALTABLE

       ä¸ºäº†æž„建一个定制的融合文件,先下载原始的独立源码文件到一个unix或者类unix开发平台。确定获取的原始源码文件不是“预编译过的源文件”。任何人都可以通过到下载页或者直接从configuration management system.获取完整的一套原始源码文件。

       å‡è®¾sqlite源码树被存在一个名为“sqlite”的目录下。计划构建一个平行目录下的名为“bld”的融合文件。首先通过运行sqlite源码树种的configure脚本运行或者通过制作一份源码树顶层的的makfile模板的一份,来构建一个合适的makefile.然后手动编辑这个Makfile去包含需要的编译时间相关的选项。最终运行:

       make sqlite3.c

       åœ¨windows上使用MSVC:

       nmake /f Makefile.msc sqlite3.c

       sqlite3.c的make

       target会自动构造一般的“sqlite3.c”合并的源码文件,以及它的头文件“sqlite3.h”,和包含TCL接口的融合源码文件“tclsqlite3.c”。之后,需要的文件可以被拷贝到文件目录下然后根据上述勾勒的过程编译。

       æž„建一个windows的动态链接库DLL

       ä¸ºäº†åœ¨windows构建一个sqlite的dll使用,首先获取对应的融合过的源码文件,sqlit3.c和sqlite.h。这些可以从SQLite website上下载或者和上述告知的一样去定制生成。

       ä½¿ç”¨å·¥ä½œç›®å½•ä¸‹çš„源码文件,一个dll可以在msvc中使用如下命令生成:

       cl sqlite3.c -link -dll -out:sqlite3.dll

       ä¸Šè¿°å‘½ä»¤éœ€è¦è¿è¡Œåœ¨msvc的MSVC Native Tools Command

       Prompt.如何你已经在机器上安装了msvc,你可能有多个版本的这种命令提示符,针对于x和x的自带构建的,或者交叉编译到ARM的。依赖要求的DLL去使用对应合适的命令提示符工具。

       å¦‚果使用MinGW编译器,命令是这样的:

       gcc -shared sqlite3.c -o sqlite3.dll

       æ³¨æ„MinGW只生成位的dll。另有一个分开的MinGW工程可以用来生成位的dll。可以推断其命令行语法是类似的。需要注意的是最近的MSVC的版本生成的DLLs可能不能工作到WinXP或者更早版本的windows上。因此为了最大限度的兼容你的生成的dll,推荐MinGW。一个好的经验法则是使用MinGW去生成位的dlls,使用msvc去生成位的dlls。

Node.js如何对SQLite的async/await封装详解

        前言

       本文主要给大家介绍的是关于Node.js对SQLite的async/await封装的相关内容,分享出来供大家参考学习,源码资本合伙人吴健下面话不多说了,来一起看看详细的介绍吧

       用于将每个SQLite函数同步化,并可以用await的接口。

       注意:需要SQLite for Node模块和Node.js 8.0+,并支持async / await。

       SQLite最常用作本地或移动应用程序的存储单元,当需要从程序的各个部分访问数据时,回调不是最佳解决方案。

       为了在程序程序中更自然地访问数据,我编写了一个将回调转换为promises的接口,因此我们可以将每个函数与await关键字一起使用。 它不是异步函数的替代品,它是一个补充,可以将原始函数和同步函数一起使用。

       aa-sqlite模块

       SQLite的接口是一个名为aa-sqlite的模块,您必须将其存储在应用程序的node_modules部分中。这是完整的源代码

       const sqlite3 = require('sqlite3').verbose()

       var db

       exports.db = db

       exports.open=function(path) {

        return new Promise(function(resolve) {

        this.db = new sqlite3.Database(path,

        function(err) {

        if(err) reject("Open error: "+ err.message)

        else resolve(path + " opened")

        }

        )

        })

       }

       // any query: insert/delete/update

       exports.run=function(query) {

        return new Promise(function(resolve, reject) {

        this.db.run(query,

        function(err) {

        if(err) reject(err.message)

        else resolve(true)

        })

        })

       }

       // first row read

       exports.get=function(query, params) {

        return new Promise(function(resolve, reject) {

        this.db.get(query, params, function(err, row) {

        if(err) reject("Read error: " + err.message)

        else {

        resolve(row)

        }

        })

        })

       }

       // set of rows read

       exports.all=function(query, params) {

        return new Promise(function(resolve, reject) {

        if(params == undefined) params=[]

        this.db.all(query, params, function(err, rows) {

        if(err) reject("Read error: " + err.message)

        else {

        resolve(rows)

        }

        })

        })

       }

       // each row returned one by one

       exports.each=function(query, params, action) {

        return new Promise(function(resolve, reject) {

        var db = this.db

        db.serialize(function() {

        db.each(query, params, function(err, row) {

        if(err) reject("Read error: " + err.message)

        else {

        if(row) {

        action(row)

        }

        }

        })

        db.get("", function(err, row) {

        resolve(true)

        })

        })

        })

       }

       exports.close=function() {

        return new Promise(function(resolve, reject) {

        this.db.close()

        resolve(true)

        })

       }

       使用示例

       下面的示例展示了aa-sqlite的每个功能的示例。在第一部分中,我们打开一个数据库,添加一个表并用一些行填充该表。然后关闭数据库,我们再次打开它并执行一些同步查询。

       const fs = require("fs")

       const sqlite = require("aa-sqlite")

       async function mainApp() {

        console.log(await sqlite.open('./users.db'))

        // Adds a table

        var r = await sqlite.run('CREATE TABLE users(ID integer NOT NULL PRIMARY KEY, name text, city text)')

        if(r) console.log("Table created")

        // Fills the table

        let users = {

        "Naomi": "chicago",

        "Julia": "Frisco",

        "Amy": "New York",

        "Scarlett": "Austin",

        "Amy": "Seattle"

        }

        var id = 1

        for(var x in users) {

        var entry = `'${ id}','${ x}','${ users[x]}'`

        var sql = "INSERT INTO users(ID, name, city) VALUES (" + entry + ")"

        r = await sqlite.run(sql)

        if(r) console.log("Inserted.")

        id++

        }

        // Starting a new cycle to access the data

        await sqlite.close();

        await sqlite.open('./users.db')

        console.log("Select one user:")

        var sql = "SELECT ID, name, city FROM users WHERE name='Naomi'"

        r = await sqlite.get(sql)

        console.log("Read:", r.ID, r.name, r.city)

        console.log("Get all users:")

        sql = "SELECT * FROM users"

        r = await sqlite.all(sql, [])

        r.forEach(function(row) {

        console.log("Read:", row.ID, row.name, row.city)

        })

        console.log("Get some users:")

        sql = "SELECT * FROM users WHERE name=?"

        r = await sqlite.all(sql, ['Amy'])

        r.forEach(function(row) {

        console.log("Read:", row.ID, row.name, row.city)

        })

        console.log("One by one:")

        sql = "SELECT * FROM users"

        r = await sqlite.each(sql, [], function(row) {

        console.log("Read:", row.ID, row.name, row.city)

        })

        if(r) console.log("Done.")

        sqlite.close();

       }

       try {

        fs.unlinkSync("./users.db")

       }

       catch(e) {

       }

       mainApp()

       由于all方法返回一个row数组,我们使用forEach来处理每一行的内容。

       你可以在每个方法的情况下进行验证,即在程序显示“完成”之前处理返回的每一行。原始异步方法不会出现这种情况。

       参考并翻译自:/sql/sqlite-async-await.php

       总结

收藏!Python内置的轻量级数据库竟如此好用!全网最实用sqlite3实战项目!

       今天我们将深入探讨 Python 内置的轻量级数据库 sqlite3 的使用方法与实战操作。对于那些希望避免复杂数据库安装过程的用户,sqlite3 无疑是一个理想的选择。它无需独立的服务器进程,且数据库文件为 .db 后缀,支持跨平台直接访问,便捷高效。

       让我们一起通过实际案例来掌握 sqlite3 的常用操作,以便在日常项目开发中灵活运用。

       主要内容

       1. 读取数据并插入数据库

       我们将以 TXT 文件为例,进行示范操作。TXT 文件为单列数据,以换行符分割,文件数量超过 个,数据总量达到 5 万以上。

       1.1 源代码

       1.2 运行效果

       1.3 重点代码解释

       自动获取所有 TXT 文件名称和路径:为了方便使用,我们编写代码自动查找所有文件名称和路径,无需手动指定。

       数据库创建与连接:利用 sqlite3.connect() 创建数据库,如果数据库文件不存在则自动创建。

       创建表:执行 SQL 语句创建表 numbers,包含两个字段:id 和 number。

       插入数据:优化文件打开方式,使用 with 语句提高效率,同时使用占位符功能自动插入数据。

       2. 数据库操作

       2.1 连接数据库

       通过指定数据库文件路径连接数据库,简化数据库管理。

       2.2 查询数据库中有哪些表

       使用 SQL 查询语句查看数据库中所有表的名称。

       2.3 删除数据库中的某个表

       执行 drop table 语句删除指定表。

       2.4 查询表结构

       2.5 查询表中前 条记录

       2.6 查询表中所有记录

       2.7 查询表中不重复记录

       2.8 将老表中的不重复记录插入新表

       2.9 将特定结果写入文本文件(单列)

       2. 将特定结果写入文本文件(多列)

       2. 将特定结果写入 CSV 文件(多列)

       2. 办公自动化案例

       利用 sqlite3 进行数据导出,实现批量生成 TXT 文件,显著提高办公效率。

       为了帮助您快速上手,所有源代码已发布至公众号智能演示,只需回复 "sqlite3" 即可获取下载链接。

       期待您的实践与探索,享受 Python 数据库操作带来的便利!