加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite中如何用api操作BLOB类型的字段

发布时间:2020-12-12 23:58:35 所属栏目:百科 来源:网络整理
导读:在实际的编程开发当中我们经常要处理一些大容量二进制数据的存储,如图片或者音乐等等。对于这些二进制数据(blob字段)我们不能像处理普通的文本那样简单的插入或者查询,为此SQLite提供了一组函数来处理这种BLOB字段类型。下面的代码演示了如何使用这些API

在实际的编程开发当中我们经常要处理一些大容量二进制数据的存储,如图片或者音乐等等。对于这些二进制数据(blob字段)我们不能像处理普通的文本那样简单的插入或者查询,为此SQLite提供了一组函数来处理这种BLOB字段类型。下面的代码演示了如何使用这些API函数。

首先创建一个数据库,然后创建一个数据表:

nsqSt = sqlite3_exec( handle,"CREATE TABLE IF NOT EXISTS PARAMETERS ( FULLNAME TEXT PRIMARY KEY,VT INTEGER,LENGTH INTEGER,VALUE BLOB,USEFUNC INTEGER )",NULL,NULL);


insertParaWithValue演示了插入blob数据

dbHandle是调用这个函数就可以获得 sqlite3_open_v2( DM_DB_FILENAME,&dbHandle,SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,NULL );


int insertParaWithValue(DBHANDLE dbHandle,const char* pszParaName,int type,const void* pData,int cbData  )
{
    const char* pTmp = "INSERT INTO PARAMETERS( FULLNAME,VT,LENGTH,VALUE,USEFUNC) VALUES('%s',%d,?,0)";
    size_t nTmp = strlen( pTmp );
    char* pSql = DMMalloc( nTmp+strlen(pszParaName)+11+11+1);  /*32bit decimal int max length is 11*/
    if(pSql==NULL)
        return ERROR;
    sprintf( pSql,pTmp,pszParaName,type,cbData);
     
    sqlite3_stmt* pstmt=NULL;
    int nRet=sqlite3_prepare_v2(dbHandle,pSql,-1,&pstmt,NULL );
    if(nRet!=SQLITE_OK)
    {
        goto ERR;
    }
    DMFree(pSql);
    pSql=NULL;
     
    nRet=sqlite3_bind_blob(pstmt,1,pData,cbData,NULL );
    if(nRet!=SQLITE_OK)
    {
        goto ERR;
    }
    nRet = sqlite3_step(pstmt);
    if(nRet!=SQLITE_DONE)
    {
        goto ERR;
    }
    nRet = SQLITE_OK;
    sqlite3_finalize(pstmt );
    return nRet;
ERR:
    if(pstmt)
        sqlite3_finalize(pstmt );
    if(pSql)
        DMFree(pSql);
    return nRet;
}

updateParaRecordWithValue演示了更新BLOB数据


static int updateParaRecordWithValue(DBHANDLE dbHandle,int cbData  )
{
    const char* pTmp = "UPDATE PARAMETERS SET VT=%d,LENGTH=%d,VALUE=?,USEFUNC=0 WHERE FULLNAME='%s'";
    size_t nTmp = strlen( pTmp );
    char* pSql = DMMalloc( nTmp+strlen(pszParaName)+11+11+1);  /*32bit decimal int max length is 11*/
    if(pSql==NULL)
        return ERROR;
    sprintf( pSql,pszParaName);
     
    sqlite3_stmt* pstmt=NULL;
    int nRet=sqlite3_prepare_v2(dbHandle,NULL );
    if(nRet!=SQLITE_OK)
    {
        goto ERR;
    }
    nRet = sqlite3_step(pstmt);
    if(nRet!=SQLITE_DONE)
    {
        goto ERR;
    }
    nRet = SQLITE_OK;
    sqlite3_finalize(pstmt );
    return nRet;
ERR:
    if(pstmt)
        sqlite3_finalize(pstmt );
    if(pSql)
        DMFree(pSql);
    return nRet;
}
更多信息请阅读我的个人博客:blog.wenshan.me

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读