+ Répondre à la discussion
Affichage des résultats 1 à 16 sur 16
  1. #1
    Responsable Java

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    juillet 2005
    Messages
    8 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : juillet 2005
    Messages : 8 255
    Points : 41 646
    Points
    41 646

    Par défaut Participez à la FAQ JDBC

    Bonjour,

    La FAQ JDBC est ouverte à tous, vous pouvez donc y participer activement. Soit vous pouvez poster vos questions et réponses dans cette enfilade, soit vous pouvez utiliser l'application collaborative d'édition de FAQ.

    L'adresse de la FAQ : http://java.developpez.com/faq/jdbc/

    Merci à tous pour vos contributions.

    L'équipe Java



    Question: Comment calculer le nombre d'enregistrement d'un ResultSet sans le parcourir en entier et sans faire de requete SELECT COUNT?

    il suffit de définir un ResultSet scrollable, de se positionner sur le dernier élément, d'obtenir son rang et de revenir à la place initiale.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public static int countItem(Connection contact, String query) throws SQLException 
        {
        	Statement stmt = contact.createStatement(    	    	    
                         ResultSet.TYPE_SCROLL_INSENSITIVE,
                         ResultSet.CONCUR_READ_ONLY);
            ResultSet resultset = stmt.executeQuery(query);
        	int nbItem = 0;
        	if (resultset!=null) {
            	resultset.last();
            	nbItem = resultset.getRow();
            	resultset.beforeFirst();
            }
            return nbItem;
        }
    Ingénieur de Recherche en informatique au LIAS / ENSMA
    Responsable Java de Developpez.com

    Page de cours : mbaron.developpez.com
    Blog : keulkeul.blogspot.com
    Page Pro : www.lias-lab.fr/members/mickaelbaron
    LinkedIn : www.linkedin.com/in/mbaron
    Twitter : www.twitter.com/mickaelbaron

  2. #2
    En attente de confirmation mail

    Inscrit en
    mars 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : mars 2003
    Messages : 71
    Points : 105
    Points
    105

    Par défaut

    Question:Comment récupérer le type SQL des colonnes d'une table?

    il suffit d'utiliser la méthode getColumnTypeName de l'interface ResultSetMetaData:

    par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static void afficheTypeColonne(ResultSet rs) {
    	String nomColonne = null;
    	String type = null;
    	ResultSetMetaData rsmd = rs.getMetaData ();
    	int nbCol = rsmd.getColumnCount ();
    	for (int i = 0; i < nbCol; i++) {
    		nomColonne = rsmd.getColumnLabel(i + 1);
    		type = rsmd.getColumnTypeName(i + 1);
    		System.out.println("Colonne: "+nomColonne+" de type: "+type);
    	}
    }

  3. #3
    Membre éclairé
    Avatar de knotty
    Inscrit en
    mars 2002
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : mars 2002
    Messages : 127
    Points : 392
    Points
    392

    Par défaut

    Je mets dans ce post des urls vers des threads que je trouve interessant. J'updaterai le post au fur et a mesure.

    Ici, bonne question bonne reponse sur hibernate / mysql et autoreconnect

    http://www.developpez.net/forums/viewtopic.php?t=171796
    Christophe Ludet
    Testez vos connaissances Java - http://knotty.developpez.com
    Donner des ailes a votre application (J2EE patterns) - http://knotty.developpez.com/j2ee

  4. #4
    duj
    duj est déconnecté
    Membre éprouvé

    Inscrit en
    juillet 2003
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : juillet 2003
    Messages : 142
    Points : 438
    Points
    438

    Par défaut

    Comment se connecter à une base de donnée Access sans devoir au préalable créer un lien odbc ?

    Il suffit d'utiliser l'URL suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jdbc:odbc:;DRIVER=Microsoft Access Driver (*.mdb);DBQ=labase.mdb;
    bien entendu, à la place de labase, mettez le nom complet de votre base (par exemple c:/temp/labse.mdb.


    Voici un exemple complet de code pour obtenir une connection:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    String url= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/temp/thebase.mdb"; 
    DBConn = DriverManager.getConnection(url,"","");
    Parfois, Google fait des miracles

  5. #5
    Futur Membre du Club
    Inscrit en
    octobre 2003
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : octobre 2003
    Messages : 34
    Points : 17
    Points
    17

    Par défaut

    JDBC : Comment éviter le problème de DataTruncation survenant très souvent avec le MySQL Connector/J.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Des pertes de précisions,  overflows, ... peuvent avoir lieu quand vous convertissez des valeurs numériques d'un type java vers mysql. Ceci va lever des exceptions, parfois non désirées.
     
    Si vous voulez éviter ces désagréments, vous pouvez affecter la valeur false au paramètre jdbcCompliantTruncation lors de la connexion à MySQL.
     
    Exemple : 
     
    jdbc:mysql://localhost/database?jdbcCompliantTruncation=false
    J'espère que j'aurai pu faire avancer les choses avec ce tips !

  6. #6
    Expert Confirmé Sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2005
    Messages
    7 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2005
    Messages : 7 430
    Points : 21 236
    Points
    21 236

    Par défaut

    Citation Envoyé par guigui5931
    Dans cet article Comment exécuter un Statement ? il y a comme code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Statement statement = connection.createStatement();
    boolean result = statement.execute("SELECT * FROM MATABLE");
    ResultSet resultSet = connection.executeQuery("SELECT ATTRIBUT1, ATTRIBUT2  FROM MATABLE");
    int col = statement.executeUpdate("INSERT INTO MATABLE VALUES(15,'bonjour',7.0)");
    il me semble qu'il y a une erreur à la troisième ligne ça devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ResultSet resultSet = statement.executeQuery("SELECT ATTRIBUT1, ATTRIBUT2  FROM MATABLE");

  7. #7
    Expert Confirmé Sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    avril 2002
    Messages
    13 470
    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 470
    Points : 21 872
    Points
    21 872

    Par défaut

    Salut,


    Dans la Q/R Où trouver les drivers ?


    On donne un lien vers la page : http://servlet.java.sun.com/products/jdbc/drivers
    Mais cette URL n'est apparemment plus valide et nous redirige vers la page d'accueil : http://java.sun.com/


    Il semblerait qu'il faille désormais utiliser l'URL suivante : http://developers.sun.com/product/jdbc/drivers

    a++

  8. #8
    Candidat au titre de Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    mai 2002
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : mai 2002
    Messages : 15
    Points : 10
    Points
    10

    Par défaut

    Comment intégrer directement le contenu d'un fichier Xml dans une base de donnée Oracle .

    exemple de fichier xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <root>
       <doc>
           <champ1>..</champ1>
           <champ2>..</champ2>
           ...
       </doc>
       <doc>
    ....
       </doc>
    </root>
    table correspondante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TABLE table1  
      champ1    VARCHAR2 (3)  NOT NULL, 
      champ2    NUMBER, 
      ...
    se procurer la bibliothèque xsu....jar dans le Xml Developpemt Kit for java

    il suffit ensuite d'ouvrir une connexion JDBC, puis d'éxecuter la méthode ad'hoc comme dans l'extrait de code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    String Url = "jdbc:oracle:thin:@"+IP+":"+PORT+":"+NOM_BASE;
    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
    Connection conn = DriverManager.getConnection(Url, user, pass);
    
    URL urlFic = OracleXMLSave.getURL(ficXml);
    OracleXMLSave oracleXMLSave = new OracleXMLSave(conn, tabName);
    int nb = oracleXMLSave.insertXML(urlFic);
    oracleXMLSave.close();
    
    conn.close();
    Et voila c'est fait .
    La même API fourni la méthode inverse pour constituer un fichier XML à partir d'une simple requete SQL fournie .

    Barny

  9. #9
    Membre du Club Avatar de mitnick2006
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    décembre 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : décembre 2006
    Messages : 163
    Points : 69
    Points
    69

    Par défaut comment extraire un champ de la base de donnée?

    si on veut par exemple extraire une somme des enregistrements d 'un champ ou le nombre des enregistrements voila la fonction
    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
     
    public String get_Word(String value){
    	  ResultSet rs;
    		try {
    			rs=statm.executeQuery(value );
    		   	System.out.println(value);		
    		    rs.next();
    		   	return rs.getString("M");
     
    		} catch (Exception e) { e.printStackTrace();
    	System.out.println("Clsgestion.getWord()	:" +
    							" impossible de touver: " + value );
    						return null;} 
      } 
    ....
    // il faut indiquer le nom du champ par l'aliace 'as M'  
    String s=get_Word("select sum(n_etudiant) AS M from etudiant");

  10. #10
    Membre du Club Avatar de mitnick2006
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    décembre 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : décembre 2006
    Messages : 163
    Points : 69
    Points
    69

    Par défaut Export & Import base mysql

    je vous propose deux codes pour exporter et importer votre base mysql en java :

    Exportation:
    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
     
    try{
        Runtime.getRuntime().exec(
    		// 1 - La commande a exécuter (le shell), en séparant les paramètres :
    		new String[] {
    			"cmd.exe", // ou command.com sous Windows 9x
    			"/C",
    			"mysqldump.exe --user=farid --password=farid mabase > C:\\base.sql" },
    		// 2 - Les variables d'environnements (null = hérité du parent)
    		null,
    		// 3 - Le répertoire de travail
    		new File("C:\\Program Files\\EasyPHP1-8\\mysql\\bin\\")
    	);
     
      }catch(IOException e){ System.out.println("erreur"); }
    et pour importer une base mysql depuis un fichier sql voici le code
    Importation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    try{
     Runtime.getRuntime().exec(
    		new String[] {
    			"cmd.exe", 
    			"/C",
    // il faut remplacer mysqldump par mysql dans le cas d' importation			
    "mysql.exe --user=farid --password=farid mabase < C:\\base.sql" },
    		null,
    		new File("C:\\Program Files\\EasyPHP1-8\\mysql\\bin\\")
    	);
     
      }catch(IOException e){ System.out.println("erreur"); }
    Remarque:
    avant d'importer le fichier sql, il faut d'abord créer une base de donnée vide
    Knoweledge Is Power In Digital World

  11. #11
    Nouveau Membre du Club
    Inscrit en
    octobre 2004
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 56
    Points : 34
    Points
    34

    Par défaut

    Bonjour, je ne sais pas si ça a sa place dans la FAQ JDBC mais je me lance en espérant qu'il faudra pas trop la remettre en forme :

    comment utiliser une base de donnée ne possédant pas de driver jdbc mais un driver odbc?

    2 solutions :

    - unixodbc a priori uniquement pour les machines unix-likes, cette solution dépends de l'installation de librairie sur le serveur et d'un driver ODBC spécifique a la DB utilisé sur le poste unix (liste ici. Certains drivers sont payants d'autres gratuits, libres ou shareware. Cette solution n'est pas limité a java

    -rmijdbc : cela permet d'utiliser un driver jdbc a travers le réseau même s'il n'est pas prévu pour cela (typiquement: le driver jdbcodbc de sun). Une utilisation possible est de mettre une source odbc sur une machine windows (dans mon cas ms access) et de l'atteindre via le rmijdbc sur le serveur distant et le pont jdbcodbc de Sun sur la machine windows

  12. #12
    Membre du Club Avatar de mitnick2006
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    décembre 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : décembre 2006
    Messages : 163
    Points : 69
    Points
    69

    Par défaut Comment savoir si un champ existe dans la base ?

    pour tester si un champ existe dans la base, j ai développé cette fonction qui retourne un boolean .

    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
     
    Statement statm;
    ...
    public boolean is_existe(String Sql)
    {
    		ResultSet rs;
    		try {
    			rs=statm.executeQuery(Sql);
     
    		        rs.next();
     
    		       if(rs.getRow()==0) 
                                 return false;
    		       else 
                                 return true;
                        } catch (Exception e) 
                                 { 
                                   e.printStackTrace();
    	                       System.out.println("Cls_base.is_existe()	:" +
    		               " impossible de touver: " +Sql);
    			       return false;
                                  }
    } 
    // notre requête sql peut etre sous la forme :
    // sql= "select "+champ+" from "+table+" where "+filtre+"='"+data+"'";
    Knoweledge Is Power In Digital World

  13. #13
    Membre éclairé

    Profil pro
    Inscrit en
    mai 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Âge : 27
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : mai 2010
    Messages : 247
    Points : 363
    Points
    363

    Par défaut

    Pas vraiment d'ajout dema part, mais plutôt deux petites erreurs constatés en utilisant la FAQ ces derniers jours :

    Une première ...

    => Chapitre 4, Comment fermer une connection ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(connection!=null){try{connection.close()}catch(Exception e){e.printStackTrace();}}
    /* devrait être */
    if(connection!=null){try{connection.close();}catch(Exception e){e.printStackTrace();}}
    et une deuxième erreur dont j'ai vu qu'elle était déja signalé il y a 3 ans....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ResultSet resultSet = connection.executeQuery("SELECT ATTRIBUT1, ATTRIBUT2  FROM MATABLE");
    /* qui devrait être */
    ResultSet resultSet = statement.executeQuery("SELECT ATTRIBUT1, ATTRIBUT2  FROM MATABLE");
    C'est en aidant les autres qu'on en apprend beaucoup soi-même

  14. #14
    Nouveau Membre du Club

    Inscrit en
    octobre 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : octobre 2004
    Messages : 10
    Points : 37
    Points
    37

    Par défaut

    Bonjour,

    Je propose de modifier le dernier point de la F.A.Q. : Comment se connecter à une base de donnée Access sans créer un lien ODBC ?

    En effet, sous Java 64 bits cela ne fonctionne pas...

    Il faut remplacer la ligne
    String url= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/temp/thebase.mdb";
    par
    String url= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/temp/thebase.mdb";

    Et avoir les drivers d'Access 2010 en version 64 bits : Ces driver sont téléchargeables sur le site de Microsoft (Microsoft Access Database Engine 2010 Redistributable [http://www.microsoft.com/en-us/downl...g=en&id=13255]), mais sont incompatibles avec les versions 32 bits de Offices.

    Pour plus d'info, cf. http://www.selikoff.net/2011/07/26/c...n-64-bit-java/

    @+, Ptitom

  15. #15
    Membre émérite
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    octobre 2011
    Messages
    443
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2011
    Messages : 443
    Points : 800
    Points
    800

    Par défaut Sélectionner les lignes d'une table en utilisant PreparedStatement

    Bonjour à tous,
    il est conseillé d'utiliser PreparedStatement dans les interrogations et les insertions dans des tables des bases de données. Certes, l'interrogation a souvent compliquer. Ci dessous, vous trouverez une petite méthode qui l'utilise sans trop de peines. On exécute la requête à l'aide d'une variable PreparedStatement, et on parcourt le résultat avec un ResultSet.
    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
     
    public static void selectionner(Connection cn, String table){
    PreparedStatement ps;
    ResultSet rs;
    //Préparer une requête
    ps = cn.prepareStatement("select * from "+table);
    //Exécuter cette dernière
    ps.executeQuery();
    //on récupère le ResultSet du ps et on le passe au rs
    rs = ps.getResultSet();
    //on parcourt rs
    while (rs.next()) {
    /*Traitement des lignes récupérées
        ...........
    */
    }
    //Fermetures
    rs.close();
    ps.close();
    }
    Bonne pratique
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

  16. #16
    Membre éprouvé
    Homme Profil pro
    Développeur Java
    Inscrit en
    novembre 2003
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : novembre 2003
    Messages : 227
    Points : 494
    Points
    494

    Par défaut

    Question: Comment être sûr de bien fermer tous les objets liés à sa requête dans le bon ordre et au bon moment en évitant les erreurs ou le code à rallonge?

    Il faut utiliser la nouvelle structure try-with-resource introduite en Java 7 qui permet de déclarer dans le try la "liste" des objets qui pourront être fermés automatiquement (les objets implémentent Closable ou AutoClosable)

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	public void myRequest(Connection cnx, String query) throws SQLException {
    		try (Statement stmt = cnx.createStatement();
    				ResultSet rs = stmt.executeQuery(query);) {
    			while (rs.next()) {
    				// faire de qu'on doit faire avec les résultats
    			}
    		}
    	}
    Ou si on veut gérer les exception SQL directement dans la méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	public void myRequest(Connection cnx, String query) {
    		try (Statement stmt = cnx.createStatement();
    				ResultSet rs = stmt.executeQuery(query);) {
    			while (rs.next()) {
    				// faire de qu'on doit faire avec les résultats
    			}
    		} catch (SQLException e){
    			// gérer les erreurs
    			Throwable[] t = e.getSuppressed(); // erreurs qui arrivent pendant la fermeture des ressources (stmt.close ou rs.close) si une autre erreur a eu lieu avant.
    		}
    	}
    On peut mettre autant d'élément qu'on veut dans le try, mais il faut que tous les objets qui y sont créés implémentent à minima Closable ou AutoClosable. Les éléments sont fermés à la fin de l'exécution du try dans l'ordre inverse de leur déclaration.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •