[学习筆记] linux sqlite編程基础

来源:互联网 发布:数据挖掘工具有哪些 编辑:程序博客网 时间:2024/05/22 03:23

操作系统:Ubuntu 10.04


一. sqlite基本操作

1. 安装sqlite3软件

    sudo apt-get install sqlite3

    tips:这个仅是个数据库软件,并不能提供編程所需环境

2. 查看安装是否成功

    $ sqlite3    SQLite version 3.7.13 2012-06-11 02:05:22    Enter ".help" for instructions    Enter SQL statements terminated with a ";"    sqlite>

3. sqlite3常用命令

      $ sqlite3 数据库名            // 从终端打开指定数据库;若数据庫不存在,则创建;若不跟数据库名称,则打开temp.      sqlite>.quit                 // 退出sqlite      sqlite>.database             // 显示当前打开的数据库文件      sqlite>.tables               // 显示数据库中所有表名      sqlite>.schema table_name    // 查看表結构      e.g. .schema contact            /************************/      /*以下为sql语句,要以";"结束*/      /************************/      sqlite>create table table_name(column1, column2, ...);      // 新建table      e.g. create table contact(name, telnum);      // 增      sqlite>insert into table_name values('xxxx', 'xxxx', ...);  // 给表中新增一条,必须将所有column都初始化      e.g. insert into contact values('xiaoming', '13400000000');      sqlite>alter table table_name add column column1;           // 给表中增加一列      e.g. alter table contact add column email;      // 删      sqlite>drop table table_name;                               // 删除指定表      e.g. drop table contact      sqlite>delete from table_name where column1='xxxx'          // 删除表中列column1内容为xxxx的一行      e.g. delete from contact where name='xiaoming'      // 改                    sqlite>update table_name set column1='xxxx',column2='xxxx' where column1='xxxx'; // 更新表中column1='xxxx'那行column1和column2      e.g. update contact set name='xiaoqiang', email='123@126.com' where name='xiaoming';      // 查      sqlite>select * from table_name;                            // 查该表中所有内容      e.g. select * from contact;      sqlite>select * from table_name where column1='xxxx';       // 查该表中column='xxxx'所在行的内容      e.g. select * from contact where telnum='13400000000';      sqlite>select column1 from table_name;                      // 查该表中column列的内容      e.g. select name from contact;

    tips: 目前该版本还不能删除指定列

二. sqlite3 C编程

    1. 安装库和头文件

        方法一: 在只安装了上述软件的基础上,还须安裝庫才能编程

         sudo apt-get install libsqlite3 libsqlite3-dev

        方法二: 官网下载源码,自己编译安装

                http://www.sqlite.org/download.html

                sqlite-autoconf-3071700.tar.gz

       $ tar zxvf sqlite-autoconf-3071700.tar.gz       $ cd sqlite-autoconf-3071700.tar.gz         $ ./configure         $ make         $ sudo make install

    2. Demo

    #include <stdio.h>    #include <stdlib.h>    #include <errno.h>    #include <error.h>    #include <sqlite3.h>    #define ERROR(_msg_) error(EXIT_FAILURE, errno, "<in %s : line %d> %s\n",\        __FILE__, __LINE__, _msg_)    int callback(void *para, int f_num, char **f_value, char **f_name);    /**     * 创建db文件(argv[1])     * 创建table student     * 插入两个学生信息     * 用回调函数打印内容     **/    int main(int argc, char **argv)    {        int i;        sqlite3 *db = NULL;        char *errmsg = NULL;        char *sql[] = {            "create table student(name, number)",            "insert into student values('xiaoming', '1')",            "insert into student values('xiaoqiang', '2')",            "select * from student"        };        if(2 != argc)            ERROR("Invalid Input!");        if(SQLITE_OK != sqlite3_open(argv[1], &db))            ERROR(sqlite3_errmsg(db));        for(i = 0; i < sizeof(sql)/ sizeof(sql[0]) - 1; ++i){            if(SQLITE_OK != sqlite3_exec(db, sql[i], NULL, NULL, &errmsg))                ERROR(sqlite3_errmsg(db));        }        if(SQLITE_OK != sqlite3_exec(db, sql[3], callback, NULL, &errmsg))            ERROR(sqlite3_errmsg(db));        sqlite3_close(db);        return 0;    }    /**     * 回调函数:每找到一条记录自动执行一次            *  para:            *  f_num:记录中包含的列数            * f_value:该列所有值的指针数组            * f_name:所有列的指针数组     **/     int callback(void *para, int f_num, char **f_value, char **f_name)    {        int i;        for(i = 0; i < f_num; ++i)            printf("%s\t|\t%s\n", f_name[i], f_value[i]);        return 0;    }

         gcc sqlite.c -o sqlite -lsqlite // 编译时不要忘记链上库

    tips:源码包中的sqlite3.c sqlite3.hs就是核心code.

           callback回调函数不是任何操作都有数据返回,如insert,delete均无数据返回,而select则有.

	
				
		
原创粉丝点击