QT를 사용하여 모든 이진 데이터 값을 sqlite3 테이블에 저장할 수 없습니다.QT를 사용하여 sqlite에 바이너리 데이터를 저장할 수 없습니다.
이 경우 logTable이라는 이진 데이터 테이블을 저장하기 위해 BLOB 데이터 열을 만들었습니다. binary_data [] 버퍼에 이진 데이터를 삽입하려고합니다. 값은 0x1에서 0xFF까지, 0x00에서 0xFF까지 1024 바이트까지입니다. 그러나 쿼리를 실행하여 데이터를 저장하면 테이블에 0x1 ~ 0xFF 만 표시되지만 나머지 문자는 저장되지 않습니다 (즉 치값이 0x00이므로). 모든 바이너리 데이터 값을 저장하고 싶습니다. SQLite는 I로부터 출력 사용시
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
conect_to_log_db("./log.db");
unsigned char binary_data[1024];
for(unsigned int i = 0, value = 1; i < 1024; i++, value++)
{
binary_data[i] = value;
}
store_to_log_db("01/02/2012,13:03:58", binary_data, 1024);
......
}
bool store_to_log_db(QString dateTime, unsigned char *data, unsigned int dataLength)
{
QSqlQuery objQuery(objLogsDB);
QString query = "CREATE TABLE IF NOT EXISTS logTable(logDateTime VARCHAR(19), packet BLOB, direction INTEGER)";
objQuery.exec(query);
QByteArray dataArr;
dataArr.resize(dataLength);
for(unsigned int i = 0; i < dataLength; i++)
{
dataArr[i] = data[i];
}
QVariant blobData = dataArr.data();
objQuery.prepare("INSERT INTO logTable VALUES(:logDateTime,:packet,:direction)");
objQuery.bindValue(":logDateTime",dateTime);
objQuery.bindValue(":packet",blobData,QSql::In | QSql::Binary);
objQuery.bindValue(":direction",1);
qDebug() << objQuery.exec();
return true;
}
이 코드를 실행 한 후, 테이블의 결과가 254 개 문자까지이다
$ sqlite3를 log.db
SQLite는> · 출력 try.txt
sqlite> select * from logTable;
$ 1!은
크기는 406 바이트
감사의 Ober, 당신은 텍스트 파일에 데이터 올바른 .dump 출력됩니다. – user1460364