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; } 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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |