2016-12-06 2 views
0

Я использую драйвер JDBC для подключения базы данных sqlite из Matlab. Я определяю функцию, чтобы открыть базу данных, которая выглядит следующим образом:Производительность базы данных matlab sqlite

function db_conn = openDBConnection(sqldb_obj, configOptions) 

     try 
      sqldb_obj.dbConn = database(sqldb_obj.dbName, sqldb_obj.userName, sqldb_obj.password, sqldb_obj.JDBC_SQLITE_DRIVER, sqldb_obj.DB_URL); 
      db_conn = sqldb_obj.dbConn;     
     catch runtimeError 

     end    
    end 

Каждый раз, когда это OpenConnection() вызывается до выполнения().

function result = execute(sqldb_obj, sql_statement, varargin) 

      sqldb_obj.openDBConnection(); 

      curs = exec(sqldb_obj.dbConn, sql_statement); 

      if curs.ResultSet ~= 0     
       curs = fetch(curs); 
       if rows(curs) == 0 
        result = []; 
       else 
        result = curs.Data; 
       end 
      else 
       % for the insert query 
       result = curs.Data; 
      end 

      % Disconnect the database connection 
      close(curs);    
end 

Производительность очень медленная, когда я вставляю таблицу в цикл for. Из профилировщика я получаю, что для функции com.mathwork.toolbox.database.closeTheDatabaseConnection требуется 754.595 секунд.

Как улучшить производительность и где проблема?

Спасибо.

+0

Почему вы заново открываете базу данных для каждого запроса? –

+0

Я не нашел хороший способ открыть базу данных только один раз. Можете ли вы назвать несколько хороших примеров для меня? Благодарю. – susanne

ответ

0

Я обнаружил, что внутри цикла for существует еще одна функция, называемая getTable(). В этом getTable() он открывает и закрывает db. Так что это занимает много времени.

Смежные вопросы