2013-07-17 4 views
0

извините за мой английский :) Попытка улучшить мое приложение Я хочу скопировать векторы непосредственно в mysql без строки, возможно ли это?FileStorage -> 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. все сохраняется в фс (FileStorage)
  2. данные в фс преобразуются в строку
  3. фс отправляемые в базу данных Известно, что программа будет работать намного быстрее, если он будет напрямую скопирован без строки в базу данных.
+0

«Известно, что программа будет работать быстрее без строки« O действительно? Строка - это просто операция с памятью, запись в базу данных - это ввод-вывод. Я бы не был так уверен. Лицо распознавания также не будет быстрым. – MSalters

ответ

0

Я думаю, вы можете использовать snprintf для этого, к сожалению, поскольку есть переменные типы, которые отсутствуют, я не могу дать вам точный пример.

char string[100]; 
snprintf(string, 100, "printe text %s,\n and integer %i", "printf", 100); //almost same as printf 
Смежные вопросы