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

SQLite Blob插入c

发布时间:2020-12-12 23:43:25 所属栏目:百科 来源:网络整理
导读:在访问了几十个包含有关SQLite信息的网站后,我仍然找不到解决方法来修复绑定blob时的错误.这是表格的变化: CREATE TABLE ONE ( ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,NAME CHAR( 50 ) NOT NULL,LABEL CHAR( 50 ),GRP CHAR( 50 ),FILE BLOB ); 以
在访问了几十个包含有关SQLite信息的网站后,我仍然找不到解决方法来修复绑定blob时的错误.这是表格的变化:
CREATE TABLE ONE ( 
ID    INTEGER     PRIMARY KEY AUTOINCREMENT
                  NOT NULL,NAME  CHAR( 50 )  NOT NULL,LABEL CHAR( 50 ),GRP   CHAR( 50 ),FILE  BLOB 
);

以下是插入代码:

int InsertFile(string name)
{
const char* dbname = name.c_str();
sqlite3 *database;
int rc = sqlite3_open(dbname,&database);
char *zErrMsg = 0;
unsigned char *buffer = (unsigned char*) malloc(sizeof(char)*MAX);

ifstream file;
file.open("Sql.pdf",ios::in|ios::binary);

    if ( ! file )
{
        cout << "An error occurred opening the file" << endl;
}

int count = 0;

const void* fileptr = NULL;


fileptr = buffer;

while(file.good())
{
    char c=file.get();
    buffer[count]=c;
    count++;
}
file.close();


sqlite3_stmt *stmt = NULL;

char* statement = "INSERT INTO ONE(     ID,NAME,LABEL,GRP,FILE ) VALUES (     NULL,'fedfsdfss',NULL,?);";

rc = sqlite3_prepare_v2(database,statement,&stmt,NULL);


rc = sqlite3_bind_blob(stmt,1,fileptr,sizeof(char)*count,SQLITE_TRANSIENT);


const char* result = sqlite3_errmsg(database);


rc = sqlite3_step(stmt);

result = sqlite3_errmsg(database);

sqlite3_close(database);


free(buffer);

fileptr=NULL;

return 0;

}
编辑:粘贴完整功能,我试图插入的字符数量约为350K.

binb_blob的结果总是21,错误代码什么都不包含.缓冲区包含二进制文件数据,其中最可能不是太大,因此错误代码.任何提示都会受到谴责.

您的代码有太多错误无法计算.

尝试这样的事情:

int InsertFile(const string& db_name)
{
    ifstream file("Sql.pdf",ios::in | ios::binary);
    if (!file) {
        cerr << "An error occurred opening the filen";
        return 12345;
    }
    file.seekg(0,ifstream::end);
    streampos size = file.tellg();
    file.seekg(0);

    char* buffer = new char[size];
    file.read(buffer,size);

    sqlite3 *db = NULL;
    int rc = sqlite3_open_v2(db_name.c_str(),&db,SQLITE_OPEN_READWRITE,NULL);
    if (rc != SQLITE_OK) {
        cerr << "db open failed: " << sqlite3_errmsg(db) << endl;
    } else {
        sqlite3_stmt *stmt = NULL;
        rc = sqlite3_prepare_v2(db,"INSERT INTO ONE(ID,FILE)"
                                " VALUES(NULL,?)",-1,NULL);
        if (rc != SQLITE_OK) {
            cerr << "prepare failed: " << sqlite3_errmsg(db) << endl;
        } else {
            // SQLITE_STATIC because the statement is finalized
            // before the buffer is freed:
            rc = sqlite3_bind_blob(stmt,buffer,size,SQLITE_STATIC);
            if (rc != SQLITE_OK) {
                cerr << "bind failed: " << sqlite3_errmsg(db) << endl;
            } else {
                rc = sqlite3_step(stmt);
                if (rc != SQLITE_DONE)
                    cerr << "execution failed: " << sqlite3_errmsg(db) << endl;
            }
        }
        sqlite3_finalize(stmt);
    }
    sqlite3_close(db);

    delete[] buffer;
}

(编辑:李大同)

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

    推荐文章
      热点阅读