void QueryDB::execQuery( const QString& db_path , const QString& query , QueryResult& q_result ) { sqlite3 *db; sqlite3_stmt *stmt; int rc = 0 ; int col, cols; q_result.clear(); rc = sqlite3_open( db_path.toAscii().data() , &db ); if( rc ){ return ; } rc = sqlite3_prepare_v2( db, query.toUtf8().data() , -1, &stmt, 0); if( rc ){ return ; } cols = sqlite3_column_count(stmt); for( col=0; col<cols; col++) { char *sql_buffer = NULL ; sql_buffer = (char*)sqlite3_column_name( stmt, col ) ; QString name = QString::fromUtf8( (const char*)sql_buffer ) ; q_result.appendColumnName( name , col ); // qDebug() << QString( (const char*)sqlite3_column_name( stmt, col ) ) ; } QStringList row ; cols = sqlite3_column_count(stmt); // execute the statement do{ rc = sqlite3_step(stmt); switch( rc ){ case SQLITE_DONE: break; case SQLITE_ROW: row.clear(); // print results for this row for( col=0; col<cols; col++){ const unsigned char *sql_buffer = NULL ; sql_buffer = sqlite3_column_text( stmt, col ) ; //if ( cols == 1 ) row.append( QString::fromUtf8( (const char*)sql_buffer ) ) ; } q_result.appendResultRow( row ) ; break; default: break; } } while ( rc == SQLITE_ROW ) ; // finalize the statement to release resources sqlite3_finalize(stmt); sqlite3_close( db ) ; }