Nach dem Besuch Dutzender Websites mit Informationen über SQLite kann ich immer noch keine Lösung finden, um einen Fehler zu beheben, während ein Blob bindet. Hier ist die Tabelle decleration:SQLite Blob Einfügen C++
CREATE TABLE ONE (
ID INTEGER PRIMARY KEY AUTOINCREMENT
NOT NULL,
NAME CHAR(50) NOT NULL,
LABEL CHAR(50),
GRP CHAR(50),
FILE BLOB
);
Und hier ist der Code zum Einfügen:
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;
} EDIT: Geklebte volle Funktion, die Menge von Zeichen einfügen im Versuch ist über 350K.
Das Ergebnis von binb_blob ist immer 21, Fehlercode enthält nichts. Puffer enthält Binärdateidaten, die wahrscheinlich nicht zu groß sind, daher der Fehlercode. Irgendwelche Hinweise würden gegeben werden.
'fileptr = & Puffer;' für einen. –
Es ist auch möglich, dass "count" falsch ist - wir sehen nicht, wie das eingestellt ist. –
count ist die Anzahl der Zeichen im Puffer, und was ist falsch mit fileptr? Platzieren des Puffers selbst ändert nichts imo – Ghostli