Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > JDBC
JDBC Forum d'entraide sur l'API JDBC (Java Database Connectivity) et l'accès aux bases de données. Avant de poster -> FAQ JDBC
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/11/2003, 16h01   #1
bahamouth
En attente de confirmation mail
 
Inscription : mars 2003
Messages : 72
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 72
Points : 93
Points : 93
Par défaut F.A.Q JDBC - participez ici

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 :
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;
    }
bahamouth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2003, 17h06   #2
bahamouth
En attente de confirmation mail
 
Inscription : mars 2003
Messages : 72
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 72
Points : 93
Points : 93
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 :
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);
	}
}
bahamouth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2004, 15h41   #3
knotty
Membre éclairé
 
Avatar de knotty
 
Inscription : mars 2002
Messages : 127
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 127
Points : 360
Points : 360
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
knotty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2004, 09h47   #4
christopheJ
Expert Confirmé Sénior
 
Avatar de christopheJ
 
Inscription : avril 2004
Messages : 1 620
Détails du profil
Informations personnelles :
Âge : 38
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : avril 2004
Messages : 1 620
Points : 4 070
Points : 4 070
Par défaut F.A.Q JDBC - participez ici

Vous pouvez participer activement à la F.A.Q JDBC

N'hésitez pas à poster vos questions et réponses dans cette enfilade.

Attention Réponse obligatoire, toute question Seule sera supprimée. Il faut poser la question et y répondre.

Merci à tous pour vos contributions
__________________
Rédacteur - modérateur Java
Les FAQ Java
Les cours et tutoriels Java
christopheJ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2004, 10h37   #5
duj
Membre éclairé
 
Inscription : juillet 2003
Messages : 142
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 142
Points : 399
Points : 399
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 :
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 :
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
duj est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2004, 12h01   #6
djskyz
Futur Membre du Club
 
Inscription : juillet 2004
Messages : 49
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 49
Points : 15
Points : 15
Merci tes pratique cette soluce !
Merite la FAQ :o
djskyz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2004, 19h24   #7
Ioan
Membre Expert
 
Avatar de Ioan
 
Inscription : juin 2003
Messages : 738
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 738
Points : 2 350
Points : 2 350
Bonjour à tous,
Comme vous pouvez le voir sur l'indexe des FAQ Java, la FAQ JDBC est en place. Ce n'est que la troisième, mais d'autres sont déjà en construction
La FAQ JDBC contient pour le moment 150 questions/réponses. Pour vous y retrouver plus facilement, n'oubliez pas la fonction rechercher.
Nous travaillons déjà sur sa future mise à jour. En attendant, toutes vos remarques, critiques et propositions sont les bienvenues. Si vous avez des propositions, vous pouvez les faire directement ici (merci duj ). Sinon, pour savoir qui contacter, regardez : Contacts et participations.
Merci d'avance.
Cordialement.
vedaer
__________________
Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le blog de l'équipe Java.
Merci de respecter les règles du club.
Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.
Ioan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2005, 02h35   #8
bugalood
Futur Membre du Club
 
Inscription : octobre 2003
Messages : 34
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 34
Points : 15
Points : 15
JDBC : Comment éviter le problème de DataTruncation survenant très souvent avec le MySQL Connector/J.

Code :
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 !
bugalood est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2007, 11h49   #9
Baptiste Wicht
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 459
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 25
Localisation : Suisse

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

Informations forums :
Inscription : octobre 2005
Messages : 7 459
Points : 21 890
Points : 21 890
Envoyer un message via MSN à Baptiste Wicht
Citation:
Envoyé par guigui5931
Dans cet article Comment exécuter un Statement ? il y a comme code
Code :
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 :
1
2
 
ResultSet resultSet = statement.executeQuery("SELECT ATTRIBUT1, ATTRIBUT2  FROM MATABLE");
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 11h36   #10
adiGuba
Expert Confirmé Sénior
 
Avatar de adiGuba
 
Homme
Développeur Java/Web
Inscription : avril 2002
Messages : 12 657
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Corse (Corse)

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

Informations forums :
Inscription : avril 2002
Messages : 12 657
Points : 22 438
Points : 22 438
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++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java Présentation de Java SE 7 (commentaires)
adiGuba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 11h55   #11
Barny
Candidat au titre de Membre du Club
 
Homme
Développeur Web
Inscription : 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 : 11
Points : 11
Comment intégrer directement le contenu d'un fichier Xml dans une base de donnée Oracle .

exemple de fichier xml
Code :
1
2
3
4
5
6
7
8
9
10
<root>
   <doc>
       <champ1>..</champ1>
       <champ2>..</champ2>
       ...
   </doc>
   <doc>
....
   </doc>
</root>
table correspondante
Code :
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 :
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
Barny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2008, 20h14   #12
mitnick2006
Membre du Club
 
Avatar de mitnick2006
 
Ingénieur développement logiciels
Inscription : décembre 2006
Messages : 163
Détails du profil
Informations personnelles :
Âge : 26

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

Informations forums :
Inscription : décembre 2006
Messages : 163
Points : 63
Points : 63
Envoyer un message via MSN à mitnick2006
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 :
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");
mitnick2006 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2008, 02h31   #13
mitnick2006
Membre du Club
 
Avatar de mitnick2006
 
Ingénieur développement logiciels
Inscription : décembre 2006
Messages : 163
Détails du profil
Informations personnelles :
Âge : 26

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

Informations forums :
Inscription : décembre 2006
Messages : 163
Points : 63
Points : 63
Envoyer un message via MSN à mitnick2006
Par défaut Export & Import base mysql

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

Exportation:
Code :
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 :
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
mitnick2006 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2009, 13h34   #14
xlurp
Nouveau Membre du Club
 
Inscription : octobre 2004
Messages : 56
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 56
Points : 33
Points : 33
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
xlurp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2009, 01h55   #15
redenil
Candidat au titre de Membre du Club
 
Inscription : janvier 2008
Messages : 62
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : janvier 2008
Messages : 62
Points : 13
Points : 13
Envoyer un message via Skype™ à redenil
merci mitnick pour la précision de réponse
redenil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2009, 03h15   #16
mitnick2006
Membre du Club
 
Avatar de mitnick2006
 
Ingénieur développement logiciels
Inscription : décembre 2006
Messages : 163
Détails du profil
Informations personnelles :
Âge : 26

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

Informations forums :
Inscription : décembre 2006
Messages : 163
Points : 63
Points : 63
Envoyer un message via MSN à mitnick2006
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 :
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
mitnick2006 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 09h20   #17
michon
Membre éclairé
 
Mickael
Inscription : mai 2010
Messages : 247
Détails du profil
Informations personnelles :
Nom : Mickael
Âge : 25
Localisation : France, Bas Rhin (Alsace)

Informations forums :
Inscription : mai 2010
Messages : 247
Points : 356
Points : 356
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 :
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 :
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
michon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2012, 11h49   #18
ptitom
Invité régulier
 
Inscription : octobre 2004
Messages : 9
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : octobre 2004
Messages : 9
Points : 9
Points : 9
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
ptitom est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h11.


 
 
 
 
Partenaires

Hébergement Web