[JDBC] Garder une connexion tout au long du programme ?
4 réponses
Arnaud
Hello !
J'interroge dans un de mes programmes une base de données (Derby ou
MySQL, ça dépend) par l'intermédiaire d'un driver JDBC avec ce type de
code :
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection connection = DriverManager.getConnection(dsURL);
Statement .....
Je ne suis pas un pro en SQL et une question me tracasse : puis-je
garder autant de temps que je veux un objet Connection sachant que je ne
suis pas le seul à me connecter à cette base de données ? En général
dans les exemples, la connection est fermée de suite après le traitement.
L'idée est que l'utilisateur ait une connexion permanente à la base de
données et exécuter x requêtes, sans réobtenir une connexion à chaque
fois. Ce qui veut dire que l'objet connection va rester actif plusieures
heures. Je ne voudrais pas engendrer de conflits ou de locks vis à vis
d'autres utilisateurs de la BDD extérieurs à mon programme.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fabien Bergeret
Arnaud wrote:
Hello !
J'interroge dans un de mes programmes une base de données (Derby ou MySQL, ça dépend) par l'intermédiaire d'un driver JDBC avec ce type de code : Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); Connection connection = DriverManager.getConnection(dsURL); Statement .....
Je ne suis pas un pro en SQL et une question me tracasse : puis-je garder autant de temps que je veux un objet Connection sachant que je ne suis pas le seul à me connecter à cette base de données ? En général dans les exemples, la connection est fermée de suite après le traitement.
L'idée est que l'utilisateur ait une connexion permanente à la base de données et exécuter x requêtes, sans réobtenir une connexion à chaque fois. Ce qui veut dire que l'objet connection va rester actif plusieures heures. Je ne voudrais pas engendrer de conflits ou de locks vis à vis d'autres utilisateurs de la BDD extérieurs à mon programme.
Merci d'avance pour vos conseils
-- Arnaud Pas de pb, les serveurs savent (heureusement) gerer plusieurs connexions
simultanees. Les conflits/locks sont traites au niveau des transactions, pas des connexions, donc pas d'impact de ce cote
Arnaud wrote:
Hello !
J'interroge dans un de mes programmes une base de données (Derby ou
MySQL, ça dépend) par l'intermédiaire d'un driver JDBC avec ce type de
code :
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection connection = DriverManager.getConnection(dsURL);
Statement .....
Je ne suis pas un pro en SQL et une question me tracasse : puis-je
garder autant de temps que je veux un objet Connection sachant que je ne
suis pas le seul à me connecter à cette base de données ? En général
dans les exemples, la connection est fermée de suite après le traitement.
L'idée est que l'utilisateur ait une connexion permanente à la base de
données et exécuter x requêtes, sans réobtenir une connexion à chaque
fois. Ce qui veut dire que l'objet connection va rester actif plusieures
heures. Je ne voudrais pas engendrer de conflits ou de locks vis à vis
d'autres utilisateurs de la BDD extérieurs à mon programme.
Merci d'avance pour vos conseils
--
Arnaud
Pas de pb, les serveurs savent (heureusement) gerer plusieurs connexions
simultanees.
Les conflits/locks sont traites au niveau des transactions, pas des
connexions, donc pas d'impact de ce cote
J'interroge dans un de mes programmes une base de données (Derby ou MySQL, ça dépend) par l'intermédiaire d'un driver JDBC avec ce type de code : Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); Connection connection = DriverManager.getConnection(dsURL); Statement .....
Je ne suis pas un pro en SQL et une question me tracasse : puis-je garder autant de temps que je veux un objet Connection sachant que je ne suis pas le seul à me connecter à cette base de données ? En général dans les exemples, la connection est fermée de suite après le traitement.
L'idée est que l'utilisateur ait une connexion permanente à la base de données et exécuter x requêtes, sans réobtenir une connexion à chaque fois. Ce qui veut dire que l'objet connection va rester actif plusieures heures. Je ne voudrais pas engendrer de conflits ou de locks vis à vis d'autres utilisateurs de la BDD extérieurs à mon programme.
Merci d'avance pour vos conseils
-- Arnaud Pas de pb, les serveurs savent (heureusement) gerer plusieurs connexions
simultanees. Les conflits/locks sont traites au niveau des transactions, pas des connexions, donc pas d'impact de ce cote
Simon OUALID
Oui c'est tout à fait possible, en gardant une référence à la connexion quelque part dans le code.
Mais attention aux effets de bords concernant la gestion des transactions, les locks, éventuellement le multithreading... et aussi au fait que la base puisse fermer la connexion (timeout) en cas d'inactivité prolongée.
++
Symon
Arnaud wrote:
Hello !
J'interroge dans un de mes programmes une base de données (Derby ou MySQL, ça dépend) par l'intermédiaire d'un driver JDBC avec ce type de code : Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); Connection connection = DriverManager.getConnection(dsURL); Statement .....
Je ne suis pas un pro en SQL et une question me tracasse : puis-je garder autant de temps que je veux un objet Connection sachant que je ne suis pas le seul à me connecter à cette base de données ? En général dans les exemples, la connection est fermée de suite après le traitement.
L'idée est que l'utilisateur ait une connexion permanente à la base de données et exécuter x requêtes, sans réobtenir une connexion à chaque fois. Ce qui veut dire que l'objet connection va rester actif plusieures heures. Je ne voudrais pas engendrer de conflits ou de locks vis à vis d'autres utilisateurs de la BDD extérieurs à mon programme.
Merci d'avance pour vos conseils
-- Arnaud
Oui c'est tout à fait possible, en gardant une référence à la connexion
quelque part dans le code.
Mais attention aux effets de bords concernant la gestion des
transactions, les locks, éventuellement le multithreading... et aussi au
fait que la base puisse fermer la connexion (timeout) en cas
d'inactivité prolongée.
++
Symon
Arnaud wrote:
Hello !
J'interroge dans un de mes programmes une base de données (Derby ou
MySQL, ça dépend) par l'intermédiaire d'un driver JDBC avec ce type de
code :
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection connection = DriverManager.getConnection(dsURL);
Statement .....
Je ne suis pas un pro en SQL et une question me tracasse : puis-je
garder autant de temps que je veux un objet Connection sachant que je ne
suis pas le seul à me connecter à cette base de données ? En général
dans les exemples, la connection est fermée de suite après le traitement.
L'idée est que l'utilisateur ait une connexion permanente à la base de
données et exécuter x requêtes, sans réobtenir une connexion à chaque
fois. Ce qui veut dire que l'objet connection va rester actif plusieures
heures. Je ne voudrais pas engendrer de conflits ou de locks vis à vis
d'autres utilisateurs de la BDD extérieurs à mon programme.
Oui c'est tout à fait possible, en gardant une référence à la connexion quelque part dans le code.
Mais attention aux effets de bords concernant la gestion des transactions, les locks, éventuellement le multithreading... et aussi au fait que la base puisse fermer la connexion (timeout) en cas d'inactivité prolongée.
++
Symon
Arnaud wrote:
Hello !
J'interroge dans un de mes programmes une base de données (Derby ou MySQL, ça dépend) par l'intermédiaire d'un driver JDBC avec ce type de code : Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); Connection connection = DriverManager.getConnection(dsURL); Statement .....
Je ne suis pas un pro en SQL et une question me tracasse : puis-je garder autant de temps que je veux un objet Connection sachant que je ne suis pas le seul à me connecter à cette base de données ? En général dans les exemples, la connection est fermée de suite après le traitement.
L'idée est que l'utilisateur ait une connexion permanente à la base de données et exécuter x requêtes, sans réobtenir une connexion à chaque fois. Ce qui veut dire que l'objet connection va rester actif plusieures heures. Je ne voudrais pas engendrer de conflits ou de locks vis à vis d'autres utilisateurs de la BDD extérieurs à mon programme.
Merci d'avance pour vos conseils
-- Arnaud
Cimballi
Plutôt que de garder une connexion ouverte très longtemps, utilise un pool de connexions. Il y a une API chez Apache qui gère ça très bien...
Cimballi
Arnaud wrote:
Hello !
J'interroge dans un de mes programmes une base de données (Derby ou MySQL, ça dépend) par l'intermédiaire d'un driver JDBC avec ce type de code : Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); Connection connection = DriverManager.getConnection(dsURL); Statement .....
Je ne suis pas un pro en SQL et une question me tracasse : puis-je garder autant de temps que je veux un objet Connection sachant que je ne suis pas le seul à me connecter à cette base de données ? En général dans les exemples, la connection est fermée de suite après le traitement.
L'idée est que l'utilisateur ait une connexion permanente à la base de données et exécuter x requêtes, sans réobtenir une connexion à chaque fois. Ce qui veut dire que l'objet connection va rester actif plusieures heures. Je ne voudrais pas engendrer de conflits ou de locks vis à vis d'autres utilisateurs de la BDD extérieurs à mon programme.
Merci d'avance pour vos conseils
-- Arnaud
Plutôt que de garder une connexion ouverte très longtemps, utilise un pool de
connexions. Il y a une API chez Apache qui gère ça très bien...
Cimballi
Arnaud wrote:
Hello !
J'interroge dans un de mes programmes une base de données (Derby ou
MySQL, ça dépend) par l'intermédiaire d'un driver JDBC avec ce type de
code :
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection connection = DriverManager.getConnection(dsURL);
Statement .....
Je ne suis pas un pro en SQL et une question me tracasse : puis-je
garder autant de temps que je veux un objet Connection sachant que je ne
suis pas le seul à me connecter à cette base de données ? En général
dans les exemples, la connection est fermée de suite après le traitement.
L'idée est que l'utilisateur ait une connexion permanente à la base de
données et exécuter x requêtes, sans réobtenir une connexion à chaque
fois. Ce qui veut dire que l'objet connection va rester actif plusieures
heures. Je ne voudrais pas engendrer de conflits ou de locks vis à vis
d'autres utilisateurs de la BDD extérieurs à mon programme.
Plutôt que de garder une connexion ouverte très longtemps, utilise un pool de connexions. Il y a une API chez Apache qui gère ça très bien...
Cimballi
Arnaud wrote:
Hello !
J'interroge dans un de mes programmes une base de données (Derby ou MySQL, ça dépend) par l'intermédiaire d'un driver JDBC avec ce type de code : Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); Connection connection = DriverManager.getConnection(dsURL); Statement .....
Je ne suis pas un pro en SQL et une question me tracasse : puis-je garder autant de temps que je veux un objet Connection sachant que je ne suis pas le seul à me connecter à cette base de données ? En général dans les exemples, la connection est fermée de suite après le traitement.
L'idée est que l'utilisateur ait une connexion permanente à la base de données et exécuter x requêtes, sans réobtenir une connexion à chaque fois. Ce qui veut dire que l'objet connection va rester actif plusieures heures. Je ne voudrais pas engendrer de conflits ou de locks vis à vis d'autres utilisateurs de la BDD extérieurs à mon programme.