4 votes

JDBC sur Google Apps script. Exception : Déclaration annulée en raison d'un dépassement de délai ou d'une demande du client

J'essaie d'extraire des données d'une base de données mySQL sur Google Cloud SQL en utilisant JDBC à partir de Google Apps script. Cependant, j'ai obtenu cette erreur :

Exception : Déclaration annulée en raison d'un dépassement de délai ou d'une demande du client

Je peux récupérer d'autres données avec succès. Cependant, je ne peux pas récupérer certaines données.

J'exécute une des requêtes réussies et une des requêtes non réussies sur mySQL workbench. Je peux exécuter la requête non réussie sans problème sur mySQL workbench.

J'ai comparé les durées.

Duration / Fetch
-------------------------------------------
Successful query:     0.140 sec / 0.016 sec
Unsuccessful query:   0.406 sec / 0.047 sec

La requête infructueuse semble prendre plus de temps. J'ai donc défini le délai d'attente de la requête avec :

stmt.setQueryTimeout(0);

l'intention de ne pas fixer de délai (lorsque la valeur est fixée à zéro, cela signifie que l'exécution n'est pas limitée dans le temps). Ensuite, je l'ai exécuté sur Google Apps script.

Cependant, cela ne fonctionne pas et j'obtiens la même erreur. Pourriez-vous me donner une solution à ce problème ?

5voto

TheMaster Points 11387

Il semble qu'il s'agisse d'un problème connu. Étoilez et commentez le question pour que les développeurs de Google accordent la priorité à ce problème. En attendant que le problème soit résolu, vous pouvez revenir au runtime rhino .

0voto

Khai Cin Points 1

Le problème était le même que celui mentionné ci-dessus et il a échoué aujourd'hui. J'ai donc essayé de changer l'ancienne version et cela fonctionne pour moi. POUR INFO

0voto

Rob Points 395

Mise à jour pour ajouter le deuxième correctif

Après quelques essais et erreurs, j'ai trouvé la solution : certaines requêtes fonctionnaient, d'autres renvoyaient cette erreur.

Fixe 1 Le dénominateur commun est que ce sont les requêtes qui ont été converties au format multilignes par le moteur V8 / le nouvel éditeur qui présentent ce problème.

À titre d'exemple, le passage au nouvel éditeur / V8 a permis de convertir de longues chaînes de texte de la manière suivante :

var query = "select Street_Number, street_name, street_suffix, street_dir_prefix, postal_code, city, mls, address, unitnumber " 
  +"as unit, uspsid,latitude,longitude from properties.forsale where status = 'active' and zpid is null and property_type = 'residential'"

Cette requête a donné lieu à l'erreur décrite. La solution consiste à modifier les requêtes plus longues pour qu'elles soient des chaînes continues, comme dans le cas suivant :

var query = "select Street_Number, street_name, street_suffix, street_dir_prefix, postal_code, city, mls, address, unitnumber as unit, uspsid,latitude,longitude from properties.forsale where status = 'active' and zpid is null and property_type = 'residential'"

Fixe 2

Celle-ci a été un peu plus frustrante. V8 n'est pas aussi indulgent en ce qui concerne les connexions à la base de données. Avant V8, il fermait automatiquement toutes les connexions qui traînaient, mais il semble que V8 n'aime pas cela. J'avais initialement écrit mes scripts pour partager le moins de connexions possible, mais j'ai remarqué que j'obtenais cette erreur sur certaines d'entre elles, et c'était celles où une connexion pouvait être "divisée". Par exemple :

var conn = getconnection() //this is a connection function I have written
  var date = date || Utilities.formatDate(new Date(), "America/Chicago", "yyyy-MM-dd");

  var keyobj = getkeys(undefined,undefined,conn);
  conn = keyobj.conn;
  var results = sqltojson(query, true, conn);

La fonction ci-dessus provoquait cette erreur, et je suppose que c'est parce que la variable "conn" était renvoyée par la fonction mais, je vais faire une hypothèse folle, que la connexion pour une raison quelconque ne peut pas être dans deux fonctions séparées à la fois puisqu'elle était renvoyée et continuait à être une valeur dans l'objet "keyobj" et aussi en tant que "conn". Ajout delete keyobj.conn immédiatement après avoir défini le conn variable a fait l'affaire :

var conn = getconnection() //this is a connection function I have written
  var date = date || Utilities.formatDate(new Date(), "America/Chicago", "yyyy-MM-dd");

  var keyobj = getkeys(undefined,undefined,conn);
  conn = keyobj.conn;
  delete keyobj.conn;
  var results = sqltojson(query, true, conn);

Ces deux corrections ont mis fin à l'erreur et ont permis au script de continuer sans problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X