SQLite基本操作

#include "..\sqlite3\include\sqlite3.h"
#include <assert.h>
#include <iostream>

#define SQLITE_SAFE_CLOSE( Ptr ){ if( nullptr != Ptr ){ sqlite3_close( Ptr ); Ptr = nullptr; } }  
#define SQLITE_SAFE_FREE( Ptr ){ if( nullptr != Ptr ){ sqlite3_free( Ptr ); Ptr = nullptr; } }  
#define SQLITE_SAFE_FREE_TABLE( Ptr ){ if( nullptr != Ptr ){ sqlite3_free_table( Ptr ); Ptr = nullptr; } } 

//回调查询
int SelectTableCallBack( void* Param, int Column, char** ColumnValue, char** ColumnName )
{
    //注意每查询到一行会执行这个方法!
    
    //传入进来的参数赋值为true表示查询到数据
    *static_cast< bool* >( Param ) = true;
    
    //这里字段名称和字段值是同步的,注意与非回调查询方式的区别!
    for( int i = 0; i < Column; ++i )
    {
        printf( "column:%s\nvalues:%s\n", ColumnName[ i ], ColumnValue[ i ] );
    }
    return 0;
}

int main()
{

    sqlite3* DataBase = nullptr;
    //打开或者创建数据库
    if( SQLITE_OK != sqlite3_open( "test.db", &DataBase ) )
    {
        assert( false );
        return 0;
    }
    
    //错误消息
    char* ErrorMsg = nullptr;

    do
    {
        //删除表
        if( SQLITE_OK != sqlite3_exec( DataBase, "drop table test", nullptr, nullptr, &ErrorMsg ) )
        {
            printf( "[%s]\n", ErrorMsg );
            assert( false );
            break;
        }

        //创建表
        if( SQLITE_OK != sqlite3_exec( DataBase,
            "create table test( id integer primary key autoincrement, name nvarchar( 32 ) )",
            nullptr,
            nullptr,
            &ErrorMsg
            ) )
        {
            printf( "[%s]\n", ErrorMsg );
            assert( false );
            break;
        }

        //插入数据
        if( SQLITE_OK != sqlite3_exec( DataBase, "insert into test( name ) values( '张三' )",
            nullptr,
            nullptr,
            &ErrorMsg ) )
        {
            printf( "[%s]\n", ErrorMsg );
            assert( false );
            break;
        }

        //插入数据
        if( SQLITE_OK != sqlite3_exec( DataBase, "insert into test( name ) values( '李四' )",
            nullptr,
            nullptr,
            &ErrorMsg ) )
        {
            printf( "[%s]\n", ErrorMsg );
            assert( false );
            break;
        }

        //修改表
        if( SQLITE_OK != sqlite3_exec( DataBase, "update test set name = '李冰冰' where name = '李四'",
            nullptr,
            nullptr,
            &ErrorMsg ) )
        {
            printf( "[%s]\n", ErrorMsg );
            assert( false );
            break;
        }

        bool IsSelectData = false;
        //回调方式查询表
        if( SQLITE_OK != sqlite3_exec( DataBase, "select * from test", SelectTableCallBack, &IsSelectData, &ErrorMsg )  )
        {
            printf( "[%s]\n", ErrorMsg );
            assert( false );
            break;
        }

        printf( "-------------------------------\n" );
        //非回调方式查询表
        char** Result = nullptr;
        int RowCount = 0;
        int ColumnCount = 0;
        if( SQLITE_OK != sqlite3_get_table( DataBase, "select * from test where name = '李冰冰'",
            &Result,
            &RowCount,
            &ColumnCount,
            &ErrorMsg ) )
        {
            printf( "[%s]\n", ErrorMsg );
            assert( false );
            break;
        }

        IsSelectData = RowCount > 0;
        //Result[ 0 至 ColumnCount -1 ] 存的为字段名称,过后存的才是字段的值

        for( int i = 0; i < RowCount; ++i )
        {
            for( int j = 0; j < ColumnCount; ++j )
            {
                printf( "column:%s\nvalues:%s\n", Result[ j ], Result[ ColumnCount + i * RowCount + j ] );
            }
        }

        //释放掉表数据
        SQLITE_SAFE_FREE_TABLE( Result );

        if( !IsSelectData )
        {
            printf( "没有查询到数据!\n" );
        }

    }while( 0 );
    
    //释放掉数据库
    SQLITE_SAFE_CLOSE( DataBase );

    //基本操作就是这样,可以满足绝大部分的功能,但是用起来还是不爽,大家试着封装成类
    //以后我也会把封装好的传上来供大家参考
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLite是一种轻量级的嵌入式数据库管理系统,它是一个开源的、零配置的、无服务器的数据库引擎。下面是SQLite基本操作介绍: 1. 创建数据库:使用SQLite命令行或者SQLite图形化工具,可以创建一个新的数据库文件,例如:`sqlite3 test.db`。 2. 创建表:在数据库中创建表格来存储数据,使用`CREATE TABLE`语句,例如:`CREATE TABLE students (id INTEGER PRIMARY KEY, name TEXT, age INTEGER);`。 3. 插入数据:使用`INSERT INTO`语句向表中插入数据,例如:`INSERT INTO students (name, age) VALUES ('Alice', 20);`。 4. 查询数据:使用`SELECT`语句从表中查询数据,例如:`SELECT * FROM students;`。 5. 更新数据:使用`UPDATE`语句更新表中的数据,例如:`UPDATE students SET age = 21 WHERE name = 'Alice';`。 6. 删除数据:使用`DELETE FROM`语句删除表中的数据,例如:`DELETE FROM students WHERE name = 'Alice';`。 7. 查询条件:可以使用`WHERE`子句来添加查询条件,例如:`SELECT * FROM students WHERE age > 18;`。 8. 排序数据:使用`ORDER BY`子句对查询结果进行排序,例如:`SELECT * FROM students ORDER BY age DESC;`。 9. 连接表:使用`JOIN`语句连接多个表进行查询,例如:`SELECT * FROM students JOIN scores ON students.id = scores.student_id;`。 10. 创建索引:使用`CREATE INDEX`语句创建索引来提高查询性能,例如:`CREATE INDEX idx_name ON students (name);`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值