SQLite在VC下的使用

来源:互联网 发布:小米网络电视怎么样 编辑:程序博客网 时间:2024/06/05 06:52
(转)http://www.sqlite.com.cn/MySqlite/4/523.Html 
一、SQLite简介 
   SQLite 是用C语言编写的开源数据库,主要用于嵌入式,你也可以把它集成在自己的桌面程序中,也有人将其替代Access,用作后台数据库。 
SQLite 支持多数SQL92标准,例如:索引、限制、触发和查看支持。 
支持 NULL、INTEGER、REAL、TEXT 和 BLOB 数据类型,支持事务。 
二、下载SQLite 
  SQLite可以到官方站点下载 
  http://www.sqlite.org/download.html 
  包括:Linux,Mac OS X, Windows下的已编译文件以及源代码、帮助文档。 
  VC中使用sqlite 
   SQLite官方下载只提供给我们一个sqlite3.dll跟一个sqlite3.def文件,并没有提供用于VC++6.0的lib文件,可以利用sqlite3.def文件生成,步骤如下: 
  1.将sqlite3.h(D:\sqlite-amalgamation-3_6_23.zip)拷贝到C:\Program Files\Microsoft Visual Studio\VC98\Include目录下,这时编译可通过,但链接错误,因为没有LIB文件() 
  2.启动一个命令行程序,进入VC的安装目录C:\Program Files\Microsoft Visual Studio\VC98\Bin,在这个目录下面有一个LIB.exe文件,使用它就能生成sqlite3.lib文件,将sqlite3.def文件放到相同目录,或者绝对路径也可以, 然后在命令行输入如下命令: 
   LIB /MACHINE:IX86 /DEF:sqlite3.def 
  该命令生成两个文件:sqlite3.lib和sqlite3.exp 
   运行该命令时,如果提示找不到MSPDB60.DLL文件,可从其它目录拷贝至Bin目录下 
  3.将生成的sqlite3.lib拷贝到Lib目录下,将sqlite3.dll拷贝到C:\WINNT\system32目录下 
   4.将sqlite3.lib加入到工程链接中,Project->Settings,Link选项卡,Object/library modules最后添入sqlite3.lib 
D:\sqlitedll-3_6_23里有.dll和.def文件 
生成的lib在bin下 
这时以下程序便可通过VC编译链接并运行: 
#include <stdio.h> 
#include <stdlib.h> 
#include <sqlite3.h> 
int column_names_printed = 0; 
void print_row(int n_values, char** values) 

    int i; 
    for (i = 0; i < n_values; ++i) { 
        printf("%10s", values[i]); 
    } 
    printf("\n"); 

int print_result(void* data, int n_columns, char** column_values, char** column_names) 

    if (!column_names_printed) { 
        print_row(n_columns, column_names); 
        column_names_printed = 1; 
    } 
    
    print_row(n_columns, column_values); 
   
   return 0; 

int main() 

    sqlite3 *db=NULL; 
    char *errMsg = NULL; 
    int rc; 
    
    rc = sqlite3_open("test.db", &db); 
    if( rc ){ 
        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); 
        sqlite3_close(db); 
        exit(1); 
    } 
    else printf("open test.db successfully!\n"); 
    
    rc = sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, NULL, NULL); 
    rc = sqlite3_exec(db, "CREATE TABLE students(number varchar(10), name varchar(10), \ 
                           sex varchar(6), age varchar(2));", NULL, NULL, NULL); 
    rc = sqlite3_exec(db, "INSERT INTO students VALUES('00001', 'Mary', 'female', '15');\ 
                           INSERT INTO students VALUES('00002', 'John', 'male', '16');\ 
                           INSERT INTO students VALUES('00003', 'Mike', 'male', '15');\ 
                           INSERT INTO students VALUES('00004', 'Kevin', 'male', '17');\ 
                           INSERT INTO students VALUES('00005', 'Alice', 'female', '14');\ 
                           INSERT INTO students VALUES('00006', 'Susan', 'female', '16');\ 
                           INSERT INTO students VALUES('00007', 'Christina', 'female', '15');\ 
                           INSERT INTO students VALUES('00008', 'Brian', 'male', '16');\ 
                           INSERT INTO students VALUES('00009', 'Dennis', 'male', '14');\ 
                           INSERT INTO students VALUES('00010', 'Daphne', 'female', '18');", 
                           NULL, NULL, &errMsg); 
    column_names_printed = 0; 
    rc = sqlite3_exec(db, "SELECT students.* FROM students WHERE sex='female';", print_result, NULL, &errMsg); 
    column_names_printed = 1; 
    printf("\n"); 
    column_names_printed = 0; 
    rc = sqlite3_exec(db, "SELECT students.* FROM students WHERE sex='male';", print_result, NULL, &errMsg); 
    column_names_printed = 1; 
    
    rc = sqlite3_exec(db, "COMMIT TRANSACTION;", NULL, NULL, NULL); 
    
    printf("error code: %d\n", rc); 
    printf("error message: %s\n", errMsg); 
    sqlite3_close(db); 
    return 0; 

另外,在vc下编译sqlite源代码,出现can not find tcl.h 可以 去掉tclsqlite.c或者在这个文件前面添加#define NO_TCL 去掉tcl的支持 
三、SQLite的简单使用 
3.1 建立数据库 
C:\sqlite-3_6_11> sqlite3.exe dbname.db 
sqlite3.exe后面跟数据库文件名,它是进入编译阶段的入口指令 
3.2 创建数据表 
sqlite> create table users(userid varchar(20) PRIMARY KEY, 
   ...> age int, 
   ...> birthday datetime); 
3.3 添加记录 
insert into users values('wang',20,'1989-5-4'); 
insert into users values('li',22,'1987-11-16'); 
3.4 查询记录 
select * from users order by birthday; 
3.5 删除记录 
delete from users where userid='wang'; 
3.6 退出sqlite 
sqlite> .exit 
SQLite数据库的数据结构是存贮在 "sqlite_master" 表中 
具体命令可以输入 .help查看或参考帮助文档 
四、编译LIB 
需要到SQLite网站下载sqlitedll-3_6_11.zip,以VS 2008为例: 
在DOS命令行下: 
PATH = D:\Program Files\Microsoft Visual Studio 9.0\VC\bin;%PATH% 
PATH = D:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE;%PATH% 
LIB /DEF:sqlite3.def /machine:IX86 

原创粉丝点击