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

操作系统: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则有.




























































































  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值