2017-01-12 8 views
0

어떻게 덤프 할 수 있습니까 Qt을 사용하여 SQLite 데이터베이스 테이블 (BLOB 유형 사용)을 사용할 수 있습니까?Qt를 사용하여 SQLite 데이터베이스 테이블 (BLOB 타입 사용)을 덤프하는 방법은 무엇입니까?

QVector<double> 나는 QByteArray으로 변환하여 BLOB으로 저장합니다.

나는 QVector<double>QByteArray A를 직렬화하기 위해 다음과 같은 기능을 사용하고 있습니다 :

QByteArray Serialize::serialize(QVector<double> data) 
{ 
    QByteArray byteArray; 
    QDataStream out(&byteArray, QIODevice::WriteOnly); 
    out << data; 
    return byteArray; 
} 

을 내가 다시 QVector<double>를 얻기 위해 역 직렬화 기능을 사용하여 데이터베이스에서 BLOB 필드를로드 할 때.

void Serialize::deserialize(QByteArray byteArray, QVector<double> *data) 
{ 
    QDataStream in(&byteArray, QIODevice::ReadOnly); 
    in >> *data; 
} 

AS는 .dump 명령이 아닌 SQLite는 라이브러리 자체에서 SQLite는 커맨드 라인 애플리케이션에서 구현된다 here 언급. 그렇다면 내가 이해할 수 있도록 수동으로 내 파일을 만들어야합니다.

나는 이미 모든 테이블에서 모든 데이터를 선택하고 SQL 파일에 삽입 할 SQL 삽입 문을 생성하는 함수를 만들었습니다.

문제

내가 데이터가 미래에 다른 데이터베이스로 가져올 수있는 SQL 문에 QByteArray ( BLOB)를 삽입하는 방법을 모른다는 것이다.

Qt 5.3을 사용하고 있습니다.

참고 :이 질문은 this one과 관련됩니다.

답변

0

이 문제는 해결되지 않았지만 파일을 작성하는 것을 포기했습니다. 테스트 목적으로 파일을 생성하기 위해 byteArray.toHex() 명령을 사용했지만 데이터베이스 파일 (.db)보다 훨씬 큰 파일을 생성했습니다.

예를 들어 데이터베이스 파일의 크기는 174MB이고 SQL 파일의 크기는 331MB입니다.

그런 다음 파일을 작성하고 데이터베이스 파일 (.db)의 복사본을 내 보낸 다음 필요할 때 시스템으로 가져옵니다.

이렇게하려면 새 연결을 만들고 현재 데이터베이스 파일로 내 보낸이 데이터베이스 파일의 모든 콘텐츠를 복사하기 만하면됩니다.

내가 말했듯이, 이것은 내 질문에 대한 대답이 아니지만 내 일반적인 문제에 대한 해결 방법입니다.

0

이 코드를 사용했습니다.

QSqlQuery insertQuery(myDatabase); 

    insertQuery.prepare("insert into images (name, data) values (:name, :data);"); 

    insertQuery.bindValue(":name",myImageName); 
    insertQuery.bindValue(":data",*picture); 

    insertQuery.exec(); 

그림은 QByteArray * 유형입니다.