5
SQLite에 대한 정보가 들어있는 수십 개의 웹 사이트를 방문한 후에도 BLOB를 바인딩하는 동안 오류를 수정하는 솔루션을 찾을 수 없습니다. 여기에 테이블 decleration입니다 :SQLite Blob 삽입 C++
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, NULL, ?);";
rc = sqlite3_prepare_v2(database, statement, 0, &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이며 오류 코드에는 아무 것도 들어 있지 않습니다. 버퍼에는 바이너리 파일 데이터가 포함되어 있습니다.이 데이터는 대부분 너무 크지 않으므로 오류 코드가됩니다. 어떤 힌트라도 알 수 있습니다.
'fileptr = 버퍼;'하나. –
'count '가 가짜 일 수도 있습니다. 어떻게 설정되는지는 알 수 없습니다. –
count는 버퍼에있는 문자의 양이며, fileptr에 문제가 있습니까? 버퍼 자체를 놓는 것은 아무것도 바뀌지 않습니다. – Ghostli