包含sqlite下载的词条

http://www.itjxue.com  2023-01-05 11:11  来源:未知  点击次数: 

我的计算机上sqlite3.all丢失了,想下一个都不行,该咋办

楼主你好,你可以重新下载一个sqlite3.dll文件,复制到c:\windows\system32文件夹,然后“开始,运行,输入regsvr32 sqlite3.dll”即可。已上传并提供下载连接,可根据需要下载。

PHP 操作 sqlite 时如何为 sqlite加密 和防止 用户下载数据库?

Sqlite数据库的加密

1、创建空的sqlite数据库。

//数据库名的后缀你可以直接指定,甚至没有后缀都可以

//方法一:创建一个空sqlite数据库,用IO的方式

FileStream?fs?=?File.Create(“c:\\test.db“);

//方法二:用SQLiteConnection

SQLiteConnection.CreateFile(“c:\\test.db“);

创建的数据库是个0字节的文件。

2、创建加密的空sqlite数据库

//创建一个密码为password的空的sqlite数据库

SQLiteConnection.CreateFile(“c:\\test2.db“);????????????????

SQLiteConnection?cnn?=?new?SQLiteConnection(“Data?Source=c:\\test2.db“);

?SQLiteConnection?cnn?=?new?SQLiteConnection(“Data?Source=D:\\test2.db“);

cnn.Open();

cnn.ChangePassword(“password“);

3、给未加密的数据库加密

SQLiteConnection?cnn?=?new?SQLiteConnection(“Data?Source=c:\\test.db“);

cnn.Open();

cnn.ChangePassword(“password“);

4、打开加密sqlite数据库

//方法一

SQLiteConnection?cnn?=?new?SQLiteConnection(“Data?Source=c:\\test2.db“);

cnn.SetPassword(“password“);

cnn.Open();

//方法二

SQLiteConnectionStringBuilder?builder?=?new?SQLiteConnectionStringBuilder();

?builder.DataSource?=?@”c:\test.db“;

builder.Password?=?@”password“;

SQLiteConnection?cnn?=?new?SQLiteConnection(builder.ConnectionString);

cnn?.Open();

分页

select?*?from?messages?limit?10,100;

表示跳过10行,取100行的返回结果。

如何自主的更新sqlite数据库版本

每次你new SQLiteOpenHelper的时候都会穿一个version, 当你传的version比当前数据库的大时就会调用该方法了。

如何使用SQLite

SQLite3是目前最新的SQLite版本。可以从网站上下载SQLite3的源代码(本书使用的版本是sqlite-3.6.12.tar.gz)。

解压缩后进入sqlite-3.6.12的根目录,首先命令“./configure”生成Makefile文件,接着运行命令“make”对源代码进行编译,最后运行命令“make install”安装SQLite3。安装完毕后,可以运行命令sqlite3查看SQLite3是否能正常运行,如下所示:

[root@localhost ~]# sqlite3

SQLite version 3.6.12

Enter ".help" for instructions

Enter SQL statements terminated with a ";"

sqlite

可以看到,SQLite3启动后会停留在提示符sqlite处,等待用户输入SQL语句。

在使用SQLite3前需要先了解下SQLite3支持的数据类型。SQLite3支持的基本数据类型主要有以下几类:

NULL

NUMERIC

INTEGER

REAL

TEXT

SQLite3会自动把其他数据类型转换成以上5类基本数据类型,转换规则如下所示:

char、clob、test、varchar— TEXT

integer—INTEGER

real、double、float— REAL

blob—NULL

其余数据类型都转变成NUMERIC

下面通过一个实例来演示SQLite3的使用方法。

新建一个数据库

新建数据库test.db(使用.db后缀是为了标识数据库文件)。在test.db中新建一个表test_table,该表具有name,、sex、age三列。SQLite3的具体操作如下所示:

[root@localhost home]# sqlite3 test.db

SQLite version 3.6.12

Enter ".help" for instructions

Enter SQL statements terminated with a ";"

sqlite create table test_table(name, sex, age);

如果数据库test.db已经存在,则命令“sqlite3 test.db”会在当前目录下打开test.db。如果数据库test.db不存在,则命令“sqlite3 test.db”会在当前目录下新建数据库test.db。为了提高效率,SQLite3并不会马上创建test.db,而是等到第一个表创建完成后才会在物理上创建数据库。

由于SQLite3能根据插入数据的实际类型动态改变列的类型,所以在create语句中并不要求给出列的类型。

创建索引

为了加快表的查询速度,往往在主键上添加索引。如下所示的是在name列上添加索引的过程。

sqlite create index test_index on test_table(name);

操作数据

如下所示的是在test_table中进行数据的插入、更新、删除操作:

sqlite insert into test_table values ('xiaoming', 'male', 20);

sqlite insert into test_table values ('xiaohong', 'female', 18);

sqlite select * from test_table;

xiaoming|male|20

xiaohong|female|18

sqlite update test_table set age=19 where name = 'xiaohong';

sqlite select * from test_table;

xiaoming|male|20

xiaohong|female|19

sqlite delete from test_table where name = 'xiaoming';

sqlite select * from test_table;

xiaohong|female|19

批量操作数据库

如下所示的是在test_table中连续插入两条记录:

sqlite begin;

sqlite insert into test_table values ('xiaoxue', 'female', 18);

sqlite insert into test_table values ('xiaoliu', 'male', 20);

sqlite commit;

sqlite select * from test_table;

xiaohong|female|19

xiaoxue|male|18

xiaoliu|male|20

运行命令commit后,才会把插入的数据写入数据库中。

数据库的导入导出

如下所示的是把test.db导出到sql文件中:

[root@localhost home]# sqlite3 test.db ".dump" test.sql;

test.sql文件的内容如下所示:

BEGIN TRANSACTION;

CREATE TABLE test_table(name, sex, age);

INSERT INTO "test_table" VALUES('xiaohong','female',19);

CREATE INDEX test_index on test_table(name);

COMMIT;

如下所示的是导入test.sql文件(导入前删除原有的test.db):

[root@localhost home]# sqlite3 test.db test.sql;

通过对test.sql文件的导入导出,可以实现数据库文件的备份。

11.2.2 SQLite3的C接口

以上介绍的是SQLite3数据库的命令操作方式。在实际使用中,一般都是应用程序需要对数据库进行访问。为此,SQLite3提供了各种编程语言的使用接口(本书介绍C语言接口)。SQLite3具有几十个C接口,下面介绍一些常用的C接口。

sqlite_open

作用:打开SQLite3数据库

原型:int sqlite3_open(const char *dbname, sqlite3 **db)

参数:

dbname:数据库的名称;

db:数据库的句柄;

sqlite_colse

作用:关闭SQLite3数据库

原型:int sqlite_close(sqlite3 *db)

例如:

test.c:

#include stdio.h

#include sqlite3.h

static sqlite3 *db=NULL;

int main()

{

int rc;

rc= sqlite3_open("test.db", db);

if(rc)

{

printf("can't open database!\n");

}

else

{

printf("open database success!\n");

}

sqlite3_close(db);

return 0;

}

运行命令“gcc –o test test.c –lsqlite3”进行编译,运行test的结果如下所示:

[root@localhost home]# open database success!

sqlite_exec

作用:执行SQL语句

原型:int sqlite3_exec(sqlite3 *db, const char *sql, int (*callback)(void*,int,char**,char**), void *, char **errmsg)

参数:

db:数据库;

sql:SQL语句;

callback:回滚;

errmsg:错误信息

例如:

test.c:

#include stdio.h

#include sqlite3.h

static sqlite3 *db=NULL;

static char *errmsg=NULL;

int main()

{

int rc;

rc = sqlite3_open("test.db", db);

rc = sqlite3_exec(db,"insert into test_table values('daobao', 'male', 24)", 0, 0, errmsg);

if(rc)

{

printf("exec fail!\n");

}

else

{

printf("exec success!\n");

}

sqlite3_close(db);

return 0;

}

编译完成后,运行test的结果如下所示:

[root@localhost home]# ./test

exec success!

[root@localhost home]# sqlite3 test.db

SQLite version 3.6.11

Enter ".help" for instructions

Enter SQL statements terminated with a ";"

sqlite select * from test_table;

daobao|male|24

sqlite3_get_table

作用:执行SQL查询

原型:int sqlite3_get_table(sqlite3 *db, const char *zSql, char ***pazResult, int *pnRow, int *pnColumn, char **pzErrmsg)

参数:

db:数据库;

zSql:SQL语句;

pazResult:查询结果集;

pnRow:结果集的行数;

pnColumn:结果集的列数;

errmsg:错误信息;

sqlite3_free_table

作用:注销结果集

原型:void sqlite3_free_table(char **result)

参数:

result:结果集;

例如:

test.c:

#include stdio.h

#include sqlite3.h

static sqlite3 *db=NULL;

static char **Result=NULL;

static char *errmsg=NULL;

int main()

{

int rc, i, j;

int nrow;

int ncolumn;

rc= sqlite3_open("test.db", db);

rc= sqlite3_get_table(db, "select * from test_table", Result, nrow, ncolumn,

errmsg);

if(rc)

{

printf("query fail!\n");

}

else

{

printf("query success!\n");

for(i = 1; i = nrow; i++)

{

for(j = 0; j ncolumn; j++)

{

printf("%s | ", Result[i * ncolumn + j]);

}

printf("\n");

}

}

sqlite3_free_table(Result);

sqlite3_close(db);

return 0;

}

编译完成后,运行test的结果如下所示:

[root@localhost home]# ./test

query success!

xiaohong | female | 19 |

xiaoxue | female | 18 |

xiaoliu | male | 20 |

daobao | male | 24 |

sqlite3_prepare

作用:把SQL语句编译成字节码,由后面的执行函数去执行

原型:int sqlite3_prepare(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **stmt, const char **pTail)

参数:

db:数据库;

zSql:SQL语句;

nByte:SQL语句的最大字节数;

stmt:Statement句柄;

pTail:SQL语句无用部分的指针;

sqlite3_step

作用:步步执行SQL语句字节码

原型:int sqlite3_step (sqlite3_stmt *)

例如:

test.c:

#include stdio.h

#include sqlite3.h

static sqlite3 *db=NULL;

static sqlite3_stmt *stmt=NULL;

int main()

{

int rc, i, j;

int ncolumn;

rc= sqlite3_open("test.db", db);

rc=sqlite3_prepare(db,"select * from test_table",-1,stmt,0);

if(rc)

{

printf("query fail!\n");

}

else

{

printf("query success!\n");

rc=sqlite3_step(stmt);

ncolumn=sqlite3_column_count(stmt);

while(rc==SQLITE_ROW)

{

for(i=0; i2; i++)

{

printf("%s | ", sqlite3_column_text(stmt,i));

}

printf("\n");

rc=sqlite3_step(stmt);

}

}

sqlite3_finalize(stmt);

sqlite3_close(db);

return 0;

}

编译完成后,运行test的结果如下所示:

[root@localhost home]# ./test

query success!

xiaohong | female | 19 |

xiaoxue | female | 18 |

xiaoliu | male | 20 |

daobao | male | 24 |

在程序中访问SQLite3数据库时,要注意C API的接口定义和数据类型是否正确,否则会得到错误的访问结果。

sqlite数据库 在windows下的sqlite.lib的库文件

1). 打开VC新建一个“Win32 Dynamic-Link Library”工程,命名为:sqlite3

2). 在接下来的对话框中选择"An empty DLL project",点 FINISH-OK

3). 将源码中所有的 *.c *.h *.def 复制到工程文件夹下

4). 在工程的Source File中添加你下载到的SQLite源文件中所有*.c文件,

注意这里不要添加shell.c和tclsqlite.c这两个文件。

5). 将 SQLite 源文件中的 sqlite3.def 文件添加到在工程的Source File中

6). 在Header File中添加你下载到的SQLite源文件中所有*.h文件,

7). 开始编译,Build(F7)一下

也许到这里会遇到一个错误:

e:\zieckey\sqlite\sqlite3\sqlite3ext.h(22) : fatal error C1083: Cannot open include file: 'sqlite3.h': No such file or directory

经检查发现,源码中包含sqlite3.h都是以 #include sqlite3.h 方式包含的,

这就是说编译器在系统默认路径中搜索,这样当然搜索不到 sqlite3.h 这个头文件啦,

这时可以改为 #include "sqlite3.h" ,让编译器在工程路径中搜索,

但是如果还有其他地方也是以 #include sqlite3.h 方式包含的,那么改源码就显得有点麻烦,

好了,我们可以这样,在菜单栏依次选择:Tools-Options...-Directeries

在下面的Directeries选项中输入你的 sqlite3.h 的路径,这里也就是你的工程目录.

添加好后,我们在编译一下就好了,

最后我们在工程目录的 Debug 目录生成了下面两个重要文件:

动态链接库文件 sqlite3.dll 和引入库文件 sqlite3.lib

二. 使用动态链接库

下面我们来编写个程序来测试下我们的动态链接库.

在VC下新建一个空的"Win32 Console Application" Win32控制台程序,工程命名为:TestSqliteOnWindows

再新建一个 test.cpp 的C++语言源程序,源代码如下:

// name: test.cpp

// This prog is used to test C/C++ API for sqlite3 .It is very simple,ha !

// Author : zieckey

// data : 2006/11/28

#include stdio.h

#include stdlib.h

#include "sqlite3.h"

#define _DEBUG_

int main( void )

{

sqlite3 *db=NULL;

char *zErrMsg = 0;

int rc;

rc = sqlite3_open("zieckey.db", db); //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件

if( rc )

{

fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));

sqlite3_close(db);

return (1);

}

else printf("You have opened a sqlite3 database named zieckey.db successfully!\nCongratulations! Have fun ! ^-^ \n");

(责任编辑:IT教学网)

更多

推荐图片影音文章