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 :

Bien utiliser un resultset?


Sujet :

JDBC Java

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 94
    Par défaut Bien utiliser un resultset?
    Voila, je suis débutant et je developpe une appli avec une connection à une BD.

    Pour ce faire j'utilise une seule instance de l'objet suivant:
    /*
    * Created on 16 oct. 2006
    */

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;



    public class DataManager {


    /**
    * VARIABLES////////////////////////////////////////////////////////////
    **/
    private Statement st;
    private ResultSet rec;
    private String data;

    /**
    * CONSTRUCTEUR/////////////////////////////////////////////////////////
    **/
    public DataManager(String NomDeOdbc){
    data ="jdbc:odbc:"+NomDeOdbc;
    //System.out.println("construction OK");
    }

    /**
    * METHODES/////////////////////////////////////////////////////////////
    **/
    public void open(){
    //Le driver
    try{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }catch(ClassNotFoundException e){
    System.err.println("erreur driver : "+e);
    }

    //la connection
    try{
    Connection maCon = DriverManager.getConnection(data, "", "");
    st = maCon.createStatement(rec.TYPE_SCROLL_SENSITIVE, rec.CONCUR_READ_ONLY);


    }catch(SQLException sqle){
    System.err.println("erreur conn : "+sqle);
    }
    //System.out.println("Open OK");
    }


    public void close(){
    try{
    st.close();
    }catch(SQLException sqle){
    System.err.println("erreur fermeture connexion : "+sqle);
    }
    //System.out.println("Close OK");
    }

    public void execute(String SQL){
    //open();
    try{
    System.out.println("la requete est: "+SQL);
    st.executeUpdate(SQL);
    }catch(SQLException sqle){
    System.err.println("erreur d'execution : "+sqle);
    }
    //close();

    }


    public ResultSet GetRs(String Sql){

    //open();
    try{
    System.out.println("la requete est: "+Sql);
    rec = st.executeQuery(Sql);

    }catch(SQLException sqle){
    System.err.println("erreur d'execution : "+sqle);
    }
    //close();
    return rec;
    }

    public String absoluteString(String S){
    String resultat="";

    for(int i=0; i<(S.length()); i++){
    //int y="'";
    if(S.charAt(i)=='\''){
    resultat+='\'';//on double le caractère pour echappement suos access
    resultat+=S.charAt(i);

    }else{
    resultat+=S.charAt(i);
    }
    }

    return resultat;
    }

    /**
    * GETTERS//////////////////////////////////////////////////////////////
    **/

    /**
    * SETTERS//////////////////////////////////////////////////////////////
    **/
    }
    /**
    * CLASSES//////////////////////////////////////////////////////////////
    **/
    Au depart, avant d'utiliser la methode getRS(), je faisait open()...et apres close.

    On m'a conseillé de ne pas faire ainsi et de faire qu'une seule fois open() et close au debut et à la fin de mon appli.

    Donc le premier getRs() que je fait fonctionne trés bien, les problemes arrivent lors de la seconde utilisation de getRs() qui dès lors me renvoie un resultset qui contient les resultats du premier getRs().

    L'ideal serait de pouvoir nettoyer entre temps, mais nettoyer quoi et comment?

    D'avance merci.

  2. #2
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Utilises les methodes close(); pour ton resultSet et ton Statement à chaque nouvelle requete


    Bref, un exemple de ce que tu devrais faire :
    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
     
    DataManager dt = new DataManager();
    dt.open();
    ResultSet rs = getRs(sqlRequest);
    //traitement
    rs.close();
    dt.closeStatement();
     
    //autre traitement
     
    dt.execute(anotherSqlRequest);
    dt.closeStatement();
     
    // autre traitement
     
    rs = getRs(yetAnotherRequest);
    rs.close();
    dt.closeStatement();
    dt.close();

    PS : un statement.close(); ne ferme pas la connection.
    Donc ajoute une méthode closeStatement(); qui te fermera ton statement, et change ta méthode close() pour qu'elle ferme la connection

Discussions similaires

  1. [MySQL] Bien utiliser addslashes
    Par Ice-tea dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 19/10/2006, 16h06
  2. document pour bien utiliser pgadmin
    Par hama dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 11/11/2005, 11h36
  3. [Optimisation] Comment bien utiliser le StringBuffer?
    Par mathieu dans le forum Langage
    Réponses: 4
    Dernier message: 17/05/2004, 14h22
  4. Comment bien utiliser ce forum ?
    Par Alcatîz dans le forum Pascal
    Réponses: 0
    Dernier message: 21/04/2004, 16h37

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