动态的sqlite3.lib相当于一个h文件,是对实现部分(.dll文件)的导出部分的声明。编译后只是将导出声明部分编译到宿主程序中,其生成的sqlite3.exe在运行时需要相应的dll文件支持 。
静态的sqlite3.lib将导出声明和实现都放在lib中。编译后所有代码都嵌入到宿主程序,其生成的sqlite3.exe可直接运行。
任务:
一.使用VS2010编译sqlite3,生成动态的sqlite3.lib和sqlite3.dll(sqlite3.dll在官网中也可下载到)。在VS2010中编写简单程序,使用动态的sqlite3.lib和sqlite3.dll。
二.使用VS2010编译sqlite3,生成静态的sqlite3.lib。在VS2010中编写简单程序,使用静态的sqlite3.lib。
任务一:
1.在sqlite官网下载sqlite-amalgamation-3071000.zip 和sqlite-dll-win32-x86-3071000.zip(我用的此版本)。
2.分别解压上述两个文件到各自文件夹下(sqlite3.def、sqlite3.dll在同一文件夹sqlite-dll下)。
3.从VS2010的安装目录下Microsoft Visual Studio 10.0\VC\bin找到lib.exe和link.exe,从VS2010的安装目录下G:\Microsoft Visual Studio 10.0\Common7\IDE找到mspdb100.dll。将lib.exe link.exe mspdb100.dll放到步骤2中的sqlite-dll文件夹下。
4.打开cmd窗口,转到上述sqlite-dll文件夹下,我的是E:\SoftwareDesign\SQLite\sqlite-dll
5.输入命令:LIB /DEF:sqlite3.def /machine:IX86。这时,在sqlite-dll文件夹下会出现sqlite3.lib。(这是动态的sqlite3.lib文件,只有47KB大小。)
6.在VS2010中编写简单程序。文件->新建->项目->Win32控制台应用程序,命名为test1 。
7.将test1.cpp中的内容替换为以下代码:
// test1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdlib.h>
#include "sqlite3.h"
int _tmain(int argc, _TCHAR* argv[])
{
int rc
int i, nrows, ncols, tr
char *errmsg = NULL
char **results
sqlite3 *db = NULL
rc = sqlite3_open("demodb", &db)
if (rc)
{
fprintf(stderr, "can't open db!/n", sqlite3_errmsg(db))
sqlite3_close(db)
exit(1)
}
else
{
printf("db open successfully!/n")
}
sqlite3_get_table(db,"select * from clients",&results,&nrows,&ncols,&errmsg)
printf("DB has %d rows and %d cols/n/n",nrows,ncols)
tr=(nrows+1)*ncols
for(i=0i<tr++i) //输出查询结果
{
printf("results[%d]= %s/n",i,results[i])//此处可以自己定义输出格式,
}
sqlite3_free_table(results)//free
sqlite3_close(db)
int a
scanf("%d",&a)//没有此行代码,运行窗口出现后会马山消失。
return 0
}
8.将sqlite3.h、sqlite3.lib、sqlite3.dll复制到工程所在文件目录中。我的是E:\SoftwareDesign\SQLite\VisualStudio2010Workspace\Projects\test1\test1,如下图所示:
9.在VS2010中,右键test1工程,添加->现有项,在出现的对话框中选择上一步中的sqlite3.lib。(必须将lib文件再添加到工程中)
10.按F5键,运行成功。
PS:这时,到工程所在文件目录下找到test1.exe(大小为29KB),我的是在E:\SoftwareDesign\SQLite\VisualStudio2010Workspace\Projects\test1\Debug。如果直接双击运行的话,会提示因缺少sqlite3.dll文件而无法运行。这是因为动态的sqlite3.lib只是将声明部分编译到test1.exe中,运行时需要dll文件的支持。将sqlite3.dll文件复制到test1.exe同一目录下,再双击运行test1.exe,就会运行成功。
任务二:
1.在VS2010中,文件->新建->项目->Win32项目,命名为sqlite3(其他名称也行)。在向导设置中,选择DLL(D)、空项目。
2.将下载的sqlite-amalgamation-3071000.zip 中的“sqlite3.h”、“sqlite3.c”、“sqlite3ext.h”三个文件添加到工程中,具体做法:右键sqlite3工程->添加->现有项,在出现的对话框中选择上述三个文件。
3.(release版本比debug版本体积小,运行速度快,所以 *** 作中我发布的是release版本)如下图所示
4.按F7键编译(或右键->生成)。在工程所在文件目录中会编译出sqlite3.dll文件。(PS:网上有的讲解需要配置很多的参数等等,试了很多次都不成功,然而按照上述无需多余 *** 作即可成功。可能是VS或sqlite版本不同的原因)
5.编译的同时会在工程所在目录中产生sqlite3.obj文件,我的是在E:\SoftwareDesign\SQLite\VisualStudio2010Workspace\Projects\sqlite3\sqlite3\Release下。接下来要用到VS安装目录下的lib.exe文件。将sqlite3.obj文件复制到lib.exe所在目录下,我的是G:\Microsoft Visual Studio 10.0\VC\bin。将G:\Microsoft Visual Studio 10.0\Common7\IDE下的mspdb100.dll,mspdbcore.dll,mspdbsrv.exe,msobj100.dll复制到lib.exe所在目录下。
6.打开cmd窗口,转到lib.exe所在文件夹下,我的是G:\Microsoft Visual Studio 10.0\VC\bin。输入命令:lib sqlite3.obj。这时会生成静态的sqlite3.lib(大小为2.32MB)。
7.在VS2010中编写简单程序。文件->新建->项目->Win32控制台应用程序,命名为test2 。
8.test2.cpp中的代码替换为上述的代码。(任务一步骤7中的代码)
9.将sqlite3.h和步骤6中生成的静态sqlite3.lib复制到test2工程所在的文件目录中,我的是E:\SoftwareDesign\SQLite\VisualStudio2010Workspace\Projects\test2\test2。
10.在VS2010中,右键test2工程->添加->现有项。选择sqlite3.lib。
11.按F5键,运行成功。
PS:这时,在E:\SoftwareDesign\SQLite\VisualStudio2010Workspace\Projects\test2\Debug下会生成test2.exe(大小为501KB)。双击可以直接运行。此时不需dll文件支持。因为静态的sqlite3.lib将导出声明和实现都放在lib中,编译后所有代码都嵌入到test2.exe,可直接运行。
一、关于SQLite ADO.NET: System.Data.SQLite 是一个原始 SQLite 的加强版。它不需要链接 .NET Runtime,因此可脱离 .NET 独立发布,它内嵌了一个完整的 ADO.NET 2.0 引擎,为开发提供了完整的支持。二、在C#中使用SQLite
1. 添加引用: System.Data.SQLite.DLL 。
2. 创建数据库文件: SQLiteConnection.CreateFile(fileName)
3. 连接数据库: var connection = new SQLiteConnection(connectionString)
connectionString 中包含了数据库的一些配置信息,比如数据库文件路径,数据库密码等,可用 SQLiteConnectionStringBuilder 来创建 connectionString,当然也有其他方法,都很简单。
4. 从数据库读取数据。
三、代码:
view sourceprint?
// 注意此处 using 。
using System
using System.Data.SQLite
using System.Text
namespace ConsoleApplication
{
public class SQLiteTester
{
public static void Test()
{
// 1.创建一个数据库文件。
var databaseFileName = "D:/test.db3"
SQLiteConnection.CreateFile(databaseFileName)
// 2.创建数据库连接。
var connectionString = new SQLiteConnectionStringBuilder
{
DataSource = databaseFileName,
Password = "xxxxxx" // 此处假设数据库密码为: xxxxxx。
}
// 当然也可以直接: var connection = new SQLiteConnection("data source=" + databaseFileName + "password=" + Password)
using (var connection = new SQLiteConnection(connectionString.ToString()))
{
// 3.打开连接。
connection.Open()
结构体和类一样引用struct A{}
A a
fun(A&o){} // o即是传递过来的引用
至于sqlite好像没听过直接用结构存储的。就直接用结构体中的变量用sprintf格式化成字符串,然后对应表中的字段逐个添加就行了,没什么困难的。如果不清楚就看看SQL语句的insert是怎么写的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)