Как мне сохранить соединение для нескольких запросов, используя JDBC и Google-App-Script? - PullRequest
0 голосов
/ 25 сентября 2018

Я видел это сообщение , но это не помогло мне решить мою проблему.

Я использую диалоговое окно HTML, открытое с помощью надстройки в таблицах Google, и яЯ использую JBDC.

Я загружаю из нескольких запросов некоторые данные из моей базы данных MYSQL, у меня также есть панель поиска для поиска данных в БД, и в будущем я бы хотел, чтобы мой HTMLавтоматически показывать различные значения базы данных в зависимости от опции, выбранной на моей странице HTML.В основном это много запросов только для одного приложения, поэтому я предполагаю, что должен использоваться один объект подключения.

Я пробовал несколько вещей, которые я могу показать вам в псевдокоде.

  1. открывать новое соединение каждый раз

, поэтому здесь будет мой GS файл

function firstFunc()
{
  var conn = Jdbc.getConnection(dbUrl, user, userPwd);
  //do my thing
  return (datas);
}
function secondFunc()
{
  var conn = Jdbc.getConnection(dbUrl, user, userPwd);
  //do my thing
  return (datas);
}
function thirdFunc()
{
  var conn = Jdbc.getConnection(dbUrl, user, userPwd);
  //do my thing
  return (datas);
}

, а затем мой HTML

<script>
     var onSuccessFirst = function (data){
      //update my HTML with data
     }
     var onSuccessSecond = function (data){
      //update my HTML with data
     }
     var onSuccessThird = function (data){
      //update my HTML with data
     }
     google.script.run.withSuccessHandler(onSuccessFirst).firstFunc();
     google.script.run.withSuccessHandler(onSuccessSecond).secondFunc();
     google.script.run.withSuccessHandler(onSuccessThird).thirdFunc();
</script>

Но так как я использую бесплатный поставщик базы данных для разработки третьего соединения, возвращается сообщение об ошибке, в котором говорится, что мне нужно подтвердить пароль или имя пользователя, потому что ему не удалось подключиться к базе данных.

попробуйте передать соединение с сервера клиенту, а затем обратно на сервер:

GS файл

function getConnection()
{
  return (Jdbc.getConnection(dbUrl, user, userPwd););
}
function firstFunc(conn)
{
  conn...
  //do my thing
  return (datas);
}
function secondFunc(conn)
{
  conn...
  //do my thing
  return (datas);
}
function thirdFunc(conn)
{
  conn...
  //do my thing
  return (datas);
}

и затем мой HTML

<script>
     var onSuccessFirst = function (data){
      //update my HTML with data
     }
     var onSuccessSecond = function (data){
      //update my HTML with data
     }
     var onSuccessThird = function (data){
      //update my HTML with data
     }
     var onSuccessConnection = function(conn)
     {
       google.script.run.withSuccessHandler(onSuccessFirst).firstFunc(conn);
       google.script.run.withSuccessHandler(onSuccessSecond).secondFunc(conn);
       google.script.run.withSuccessHandler(onSuccessThird).thirdFunc(conn);
     }
     google.script.run.withSuccessHandler(onSuccessConnection).getConnection();
</script>

Но здесь conn равно null.

У меня также есть много запросов, отправленных, когда мой ввод (панель поиска) равен onchange, и я использую первый методон работает, за исключением того, что не позволяет быстро набирать текст, поскольку увеличивает количество запросов на соединение для каждого набираемого символа.

Что я могу сделать?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Возможно. Попробуйте объединить в цепочку с вашим первым подходом:

<script>
 var onSuccessThird = function (data){
  //update my HTML with data
 }
 var onSuccessSecond = function (data){
  //update my HTML with data
 google.script.run.withSuccessHandler(onSuccessThird).thirdFunc();
 }
 var onSuccessFirst = function (data){
  //update my HTML with data
 google.script.run.withSuccessHandler(onSuccessSecond).secondFunc();
 }
 google.script.run.withSuccessHandler(onSuccessFirst).firstFunc();
</script>

Примечания:

  • google.script.run - это асинхронная функция.Все три запуска будут вызваны один за другим, не дожидаясь завершения предыдущего запуска, что означает, что почти 3 соединения Jdbc будут открыты более или менее одновременно при первом подходе.
  • Один script.run вызов закроет соединение.Таким образом, в вашем втором подходе conn будет нулевым, когда первый запуск закончится или до этого.

    Соединения JDBC закрываются автоматически по завершении выполнения скрипта.(Имейте в виду, что один вызов google.script.run считается полным выполнением, даже если страница службы HTML, которая сделала вызов, остается открытой.)

Ссылки:

0 голосов
/ 25 сентября 2018

Если вы можете использовать пул соединений, в противном случае вы можете сохранить соединение живым для одного полного набора транзакций, проверив нулевое значение и открыв / закрыв соединение только один раз для полного набора ответа на запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...