zoukankan      html  css  js  c++  java
  • 在虚拟机中搭建SQLITE环境,并测试其是否安装成

    1.下载压缩包后解压sqlite-3.6.3tar.gz到/home目录下

    tar -zxvf sqlite-3.6.3tar.gz -C /home
    
    cd /home/
    
    mkdir sqlite-ix86-linux/
    
    cd /home/sqlite-ix86-linux/
    
    /sqlite-3.6.3/configure --prefix=/home/sqlite-ix86-linux/

    其中--prefix=/home/sqlite-ix86-linux/的意思是将configure是用来进行用户个性配置的工具, 一般- -开头的说明的是需要配置的选项,--prefix就是说软件额安装目录设置在哪里,后面的=/usr就是你给出的安装目录,当然你完全可以换一个目录。

    2.编译并安装,然后生成帮助文档

    Make && make install && make doc

    3.此时库文件已经生成在/home/sqlite-ix86-linux/lib目录下

    可执行文件sqlite3已经生成在/home/sqlite-ix86-linux/bin目录下

    4.测试编译安装是否成功

    在命令行直接输入:/home/sqlite-ix86-linux/bin/sqlite3 test.db

    当我们运行完这一句的时候,test.db会存在于当前的目录下。查看当前目录的命令pwd。

    clip_image002_thumb

    出现了SQLITE的版本号即其他信息,并且数据库test.db创建成功,表明编译安装已经成功

    5.在程序中操作数据库

    注:我的程序是在KDevelop中开发的。如果出现编译不通过的问题,请查看下文可能出现的问题。

    #ifdef HAVE_CONFIG_H
    #include <config.h>
    #endif
    
    #include <stdio.h>
    #include <stdlib.h>
    
    #include <sqlite3.h>
    int main()
    {
        sqlite3 *db=NULL;
        char *zErrMsg=0,*sql=NULL;
        int rc;
            //char *sql;
        rc=sqlite3_open("test.db",&db);
        if(rc)
        {
        fprintf(stderr,"can't open database:%s\n",sqlite3_errmsg(db));
        sqlite3_close(db);
        return 0;
        }
        else printf("you have opend a selite3 database3 named test.db successfully!\ncongraturations! have fun!\n");
        sqlite3_exec(db,sql,0,0,&zErrMsg);
    
        //创建一个表,如果该表存在,则不创建,并给出提示信息,存储在 zErrMsg 中
        sql = "CREATE TABLE SensorData(\
        ID INTEGER PRIMARY KEY,\
        SensorID INTEGER,\
        SiteNum INTEGER, \
        Time VARCHAR(12), \
        SensorParameter REAL \
        );";
        sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
        printf("ErrorMsg:%s",zErrMsg);
        //插入数据 
        sql = "INSERT INTO \"SensorData\" VALUES( NULL , 1 , 1 , '201205011206', 18.9 );" ;
        sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
        
        sql = "INSERT INTO \"SensorData\" VALUES( NULL , 1 , 1 , '201205011306', 16.4 );" ;
        sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
        sqlite3_close(db);
        return 0;
    }

    运行完以下代码后,我们就可以在

    你的工程目录/程序目录/debug/src/中看到test.db这个文件了。

    image_thumb[5]

    下面让我们输入一些命令看看表中的数据

    image_thumb[4]

     

    可能出现的错误:

    1、用KDevelop编译的时候总是会出现错误,如下所示

    提示如下错误: main.o(.text+0x9b):main.cpp: undefined reference to `sqlite3_open'
    main.o(.text+0xcb):main.cpp: undefined reference to `sqlite3_exec'
    main.o(.text+0xda):main.cpp: undefined reference to `sqlite3_close'
    main.o(.text+0x10d):main.cpp: undefined reference to `sqlite3_close'
    main.o(.text+0x14b):main.cpp: undefined reference to `sqlite3_errmsg'
    main.o(.text+0x173):main.cpp: undefined reference to `sqlite3_close' 明显示找不到lib库文件,

    解决方法:在Kdevelop中添加SQLite的静态链接库

    具体步骤:
    Kdevlop的project options->配置选项->C程序->编译器标志中写入如下参数:
    -L/home/sqlite-ix86-linux/lib -lsqlite3

    其中/home/sqlite-ix86-linux/是你sqlite的安装目录。如果还不清楚,请参照下图操作

    image_thumb

    图1 打开project options

    image

    图2 设置编译器标志

     image
     


    2、sqlite3如何退出...>状态,你会了吗?

    一般是进入SQL数据语言模式了,此时要想退出…>状态,只要输入一条完整的SQL语句就行了,也就是末尾要加上;(分号)这个符号就可以退回到sqlite>状态

    3、sqlite不会把附加过的数据库文件统一管理。
    习惯了使用SQL Server Management Studio了,在SQL Server Management Studio中当数据库被附加过了,那么我们就可以通过SQL Server Management Studio进行管理,而不必每次使用,每次都进行附加。但是在sqlite中,附加过的数据库不会在sqlite中存有什么记录,如果要再次管理某个数据库,你需要再次运行sqlite3 数据库名,才能进行数据库的操作。这一点很重要,之前我就在这个地方困惑了很久。


    参考连接

    ./configure --prefix=/usr 什么意思

    Linux环境变量的设置和查看方法

  • 相关阅读:
    Sharding-JDBC多数据源动态切换
    U 盘安装 CentOS 7 时出现 No Caching mode page found 问题的解决
    sudo 密码直接添加到命令行以方便实现脚本自动化
    Python3 Windows 虚拟环境的若干问题
    20 张图让你彻底弄懂 HTTPS 原理!
    全网写得最好的分库分表之 Sharding-JDBC 中间件介绍
    以为线程池很简单,结果第一道题就被干趴下了!
    以为线程池很简单,没想到第一问就被干趴下了
    分布式事务,看这篇就够了!
    我是一个线程池
  • 原文地址:https://www.cnblogs.com/kissazi2/p/3135222.html
Copyright © 2011-2022 走看看