IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Probleme pour fermer une connection sur un serveur sql


Sujet :

JDBC Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 179
    Par défaut Probleme pour fermer une connection sur un serveur sql
    Bonjour,

    j'ai un soucis car je n'arrive pas à savoir comment m'y prendre pour fermer la connection
    lorsque l'on clique sur la "croix".

    Voici le code que j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    public class Test{
    public static void main(String[] args){
                  Frame frame = new Frame();
    		String[] titres = {"NOM", "PRENOM", "ADRESSE","AGE"};
    		MyTableModel maTable = new MyTableModel(titres);		
    		JTable jTable = new JTable(maTable);
     
     
    		List<Object[]> donnees = new ArrayList<Object[]>();
     
     
    		//Parametre de connexion a la base de données
    		String url = "jdbc:sqlserver://database:1253;databaseName=MaTable";
        String login = "root";
        String password = "root";
        final Connection connection = null;
     
        ImprimerTable imp = new ImprimerTable(maTable, jTable);
        JScrollPane scroll = new JScrollPane(imp);
    		frame.setSize(600,250);
    		frame.add(scroll);
    		frame.setVisible(true);
    		//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.addWindowListener(new java.awt.event.WindowAdapter() {
    			public void windowClosing(java.awt.event.WindowEvent evt) {
    				try{
    					connection.close();
    				}catch(SQLException se){
    					se.printStackTrace();
    				}
    			} 
    		} );;
     
    		try{
    			while(true){		
    				maTable.vide();
    				Driver monDriver = new SQLServerDriver();
    				DriverManager.registerDriver(monDriver);	
    				connection=DriverManager.getConnection(url,login,password);
    				Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    				Statement stmt = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
    				String sql = 
    					"SELECT * FROM MaTable";
    				ResultSet rs = stmt.executeQuery(sql);
    				ResultSetMetaData rsmd = rs.getMetaData();
    				int ncols = rsmd.getColumnCount();
    				//Remise du curseur à sa position initiale
    				rs.beforeFirst();
    				boolean suivant = rs.next();
    				while(suivant){
    					Object val [] = new Object[ncols];
    					for(int j=1; j<=ncols; j++)
    						val[j-1] = rs.getString(j);
    					donnees.add(val);
    					suivant = rs.next();
    				}		
    				((MyTableModel)jTable.getModel()).remplie(donnees);	
    				//Remise du curseur à sa position initiale
    				rs.beforeFirst();
    				try {
    					Thread.sleep(20000);
    				}catch(InterruptedException ie){
    					ie.printStackTrace();
    					connection.close();
    				}	
    			}
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    	}
    Au départ, je n'avais pas mis Connection comme final et ça me mettait une exception dans la méthode WindowClosing.
    Maitenant que j'ai ajouté final, j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The final local variable connection cannot be assigned. It must be blank and not using a compound assignment
    C'est la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connection=DriverManager.getConnection(url,login,password);
    Une solution pour résoudre ce soucis ?

    Merci

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,



    Une variable final ne peut être assigné qu'une seule fois... d'où ton erreur !
    Il est préférable d'utiliser des try/finally pour fermer la connection...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Connection connection = DriverManager.getConnection(url,login,password);
    try {
        // Utilisation de la connection
    } finally {
        connection.close();
    }
    Cette remarque est vrai pour tous les types de ressources (Statement, ResultSet, ou encore fichiers, sockets, etc.)

    a++

  3. #3
    Membre expérimenté Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Par défaut
    Tu peux essayer en initialisant ta connexion en dehors de ta boucle de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ...
    //Paramètres de connexion a la base de données
    String url = "jdbc:sqlserver://database:1253;databaseName=MaTable";
    String login = "root";
    String password = "root";
     
    //Connexion à la base de données
    Driver monDriver = new SQLServerDriver();
    DriverManager.registerDriver(monDriver);
    final Connection connection=DriverManager.getConnection(url,login,password);
    ...
    Cela te permettra de ne pas modifier connection après l'avoir déclaré comme final (ce qui est la cause de ton erreur).
    De plus, cela t'évitera de demander une nouvelle connexion à chaque passage dans ta boucle (=> meilleures performances).

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 179
    Par défaut
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 22
    Dernier message: 30/06/2011, 15h48
  2. Fermer les connections sur le serveur
    Par Dschub dans le forum Accès aux données
    Réponses: 4
    Dernier message: 11/05/2009, 15h45
  3. telnetlib probleme de connection sur un serveur Win NT
    Par olliebackflip dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 21/06/2007, 23h42
  4. probleme pour mettre une applet sur le web
    Par jayjay.f dans le forum NetBeans
    Réponses: 22
    Dernier message: 06/12/2006, 00h34
  5. [C# 2.0] Comment créer une table sur un serveur SQL 2000 ?
    Par Filippo dans le forum Accès aux données
    Réponses: 1
    Dernier message: 15/09/2006, 13h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo