在VC中使用SQLite的例子

一. 准备工作:
(1)在SQLite的官方网站下载Windows平台下的3.5.0版本的SQLite, 下载地址:
http://www.sqlite.org/sqlitedll-3_5_0.zip
压缩文件中包含了sqlite3.dll和sqlite3.def文件. 用LIB命令生成用于连接(LINK)使用的lib文件:
LIB /DEF:sqlite3.def /machine:IX86
这样就生成了:
sqlite3.lib 和 sqlite3.exp 两个文件
sqlite3.lib文件是我们连接程序所使用的.
(2)在SQLite官方网站下载SQLite3的源程序, 下载地址:
http://www.sqlite.org/sqlite-source-3_5_0.zip
解压出sqlite3.h文件
(3)将(1)和(2)中得到的文件放在sqlite3_lib目录(需要新建)中, 此时sqlite3_lib目录下应该有:
sqlite3.h
sqlite3.dll
sqlite3.lib
sqlite3.def
等文件.

二. 编写例子程序:
(1)打开VS2005创建一个新的项目:
项目类型: Visual C++
模板: Win32控制台应用程序
将"准备工作"中建立的sqlite3_lib目录复制到你的项目所在的目录下, 然后在VS2005的IDE中对此项目进行如下的设置:
选择菜单: "项目" -> "(项目名称) 属性...", 在弹出的对话框中选择"配置属性"->"链接器"->"输入", 在"附加依赖项"中输入.\sqlite3_lib\sqlite3.lib;
然后继续在对话框中选择"配置属性"->"C/C++"->"预编译头", 在"创建/使用预编译头"中选择"不使用预编译头";
然后"确定".

(2)演示代码1
#include <stdio.h>
#include <stdlib.h>

#include ".\sqlite3_lib\sqlite3.h"

static int _callback_exec(void * notused,int argc, char ** argv, char ** aszColName)
{
    int i;
    for ( i=0; i<argc; i++ )
    {
        printf( "%s = %s\n", aszColName[i], argv[i] == 0 ? "NUL" : argv[i] );
    }

    return 0;
}

int main(int argc, char * argv[])
{
    const char * sSQL = "select * from t1;";
    char * pErrMsg = 0;
    int ret = 0;
    sqlite3 * db = 0;
   
    ret = sqlite3_open("./prog.db", &db);

    if ( ret != SQLITE_OK )
    {
        fprintf(stderr, "Could not open database: %s", sqlite3_errmsg(db));
        exit(1);
    }

    printf("Successfully connected to database\n");

    sqlite3_exec( db, sSQL, _callback_exec, 0, &pErrMsg );
    if ( ret != SQLITE_OK )
    {
        fprintf(stderr, "SQL error: %s\n", pErrMsg);
        sqlite3_free(pErrMsg);
    }

    sqlite3_close(db);
    db = 0;

    return 0;
}

(3)演示代码2
#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("s", 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;
}

三. 编译运行.
完全的项目我已经放到网站上了, 大家可以 下载 :
http://www.ponyse.com/downloads/SQLiteDemo.rar

注:
SQLite是一个小型的C程序库,实现了独立的,可嵌入的,零配置的SQL数据库引擎。
官方网址:  http://www.sqlite.org/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值