0

私の英語で申し訳ありません:) アプリケーションを改善しようとしています。ベクトルを文字列なしで mysql に直接コピーしたいのですが、それは可能ですか?

FileStorage fs( ".yml", FileStorage::WRITE + FileStorage::MEMORY );

Ptr < FaceRecognizer > model0 = createmyfisherRecognizer();

model0->train( images, labels );

model0->save( fs );




void myfisher::save( FileStorage & fs ) const {

    static char * host = "localhost"; /* host serwera MySQL */
    static char * user = "root"; /* nazwa loginu by polaczyc sie do serwera */
    static char * password = ""; /* haslo */
    static char * sql_db = "fisher"; /* nazwa bazy */
    static unsigned int sql_port = NULL; /* port na jakim odbiera/wysyla serwer mysql */
    static char * opt_socket = NULL; /* socket name */
    static unsigned int sql_flags = 0;
    static MYSQL * sock; /* Wskaznik do polaczenia do MySQL */

    sock = mysql_init( NULL );

    if( mysql_real_connect( sock, host, user, password, sql_db, sql_port, opt_socket, sql_flags ) )
         cout << "Poprawnie polaczyles sie z baza danych" << endl;
    else
         cout << "Blad w polaczeniu z baza danych" << endl;

    fs << "num_components" << _num_components;
    fs << "mean" << _mean;
    fs << "eigenvalues" << _eigenvalues;
    writeFileNodeList( fs, "projections", _projections );
    fs << "labels" << _labels;

    string buf = fs.releaseAndGetString();

    fs.release();

    string zapytanie = "insert into baa values (\"" + buf + "\")";

    if( !mysql_query( sock, zapytanie.c_str() ) )
         cout << "Poprawnie dodano" << endl;
    else
         cout << "Blad przy zapisywaniu" << endl;

}

ここに問題のコードを投稿しました。現時点では、次のように動作します。

  1. すべてが fs (FileStorage) に保存されます
  2. fs のデータは文字列に変換されます
  3. データベースに送信された fs 文字列なしでデータベースに直接コピーすると、プログラムの実行速度が大幅に向上することが知られています。
4

1 に答える 1

0

これにはsnprintfを使用できると思いますが、残念ながら変数の型が欠落しているため、正確な例を示すことはできません。

char string[100];
snprintf(string, 100, "printe text %s,\n and integer %i", "printf", 100); //almost same as printf
于 2013-07-17T11:46:35.400 に答える