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

FAQ JDBCConsultez toutes les FAQ

Nombre d'auteurs : 8, nombre de questions : 162, derni�re mise � jour : 3 juin 2015  Ajouter une question

 

Cette FAQ a �t� r�alis�e � partir des questions fr�quemment pos�es sur les forums de http://www.developpez.com et de l'exp�rience personnelle des auteurs.

Nous tenons � souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne pr�tend pas non plus �tre compl�te. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant r�dacteur, lisez ceci.

SommaireDivers (4)
pr�c�dent sommaire
 

L'interface ParameterMetaData permet d'obtenir des informations sur les param�tres d'un PreparedStatement. Par exemple :

Code java : S�lectionner tout
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
String sql = "..."; 
PreparedStatement statement = connection.prepareStatement(sql); 
ParameterMetaData metadata = statement.getParameterMetaData(); 
for(int i=0; i<metadata.getParameterCount(); i++){ 
   String classe = metadata.getParameterClassName(i);  
   int mode = metadata.getParameterMode(i); 
   String sMode = ""; 
   switch(mode){ 
     case ParameterMetaData.parameterModeIn: 
        sMode = "IN"; 
        break; 
     case ParameterMetaData.parameterModeOut: 
        sMode = "OUT"; 
        break;    
     case ParameterMetaData.parameterModeInOut: 
        sMode = "INOUT"; 
        break;    
     case ParameterMetaData.parameterModeUnknown: 
        sMode = "inconnu"; 
        break;    
     default : sMode = "bug!!!";break;    
   } 
   int type = metadata.getParameterType(i);  
   String sType = metadata.getParameterTypeName(i);  
   int precision = metadata.getPrecision(i);  
   int scale = metadata.getScale(i);  
   int nullable = metadata.isNullable(i);  
   String sNullable = ""; 
   switch(nullable){ 
     case ParameterMetaData.parameterNoNulls: 
        sNullable = "ne peux pas �tre NULL"; 
        break; 
     case ParameterMetaData.parameterNullable: 
        sNullable = "peux �tre NULL"; 
        break;    
     case ParameterMetaData.parameterNullableUnknown: 
        sNullable = "inconnu"; 
        break;    
     default : sNullable = "bug!!!";break;    
   } 
   boolean sign = metadata.isSigned(i); 
   System.out.println("INFORMATIONS SUR LE PARAMETRE D'INDEX "+i); 
   System.out.println("Classe java = "+classe); 
   System.out.println("Mode = "+mode+" : "+sMode); 
   System.out.println("Type dans java.sql.Types = "+type); 
   System.out.println("Nom du type = "+sType); 
   System.out.println("Pr�cision = "+precision); 
   System.out.println("Scale = "+scale); 
   System.out.println("Nullable = "+nullable+" : "+sNullable); 
   System.out.println("Sign� = "+sign); 
}
Attention, il ne faut pas confondre getParameterMetaData et getMetaData. La seconde m�thode permet de r�cup�rer les m�tadonn�es des ResultSet produits par le PreparedStatement. Ces m�tadonn�es sont r�cup�r�es sous forme de ResultSetMetaData.

Mis � jour le 11 avril 2013 Ioan

Il n'existe pas de m�canisme standard � JDBC pour conna�tre quelles sont les requ�tes envoy�es au SGBD. Certains drivers red�finissent les m�thodes toString() (pour Statement, PreparedStatement ou CallableStatement). Mais, il est difficile de faire une application � portable � dans ces conditions.

Heureusement, il existe une API pouvant aider � surveiller les requ�tes envoy�es au SGBD : P6SPY.
Cette API d�finit en fait un � driver � qui va englober le driver r�el. Pour plus d'informations, regardez la documentation de P6SPY.

Mis � jour le 11 avril 2013 Ioan

Malheureusement, non, il n'existe pas de mani�re g�n�rique pour cr�er une base de donn�es avec JDBC. En fait JDBC est oblig� d'avoir une base de donn�es � laquelle se connecter pour pouvoir travailler.

Il existe tout de m�me une possibilit� : il faut utiliser une Connection factice qui servira de pont entre vous et le SGBD. � partir de cette Connection, vous pourrez ex�cuter une instruction sp�cifique au SGBD pour cr�er une autre base de donn�es.

Voici une m�thode qui permet de cr�er une base de donn�es MySql et d'obtenir une Connection � celle-ci :

Code java : S�lectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static Connection createMysqlDatabase(Connection factice, String user,  
                                             String pass, String nomBase)  
                                             throws SQLException{ 
   Connection connection = null; 
   Statement statement = null; 
   try{ 
      statement = factice.createStatement(); 
      statement.execute("CREATE DATABASE "+nomBase); 
      String url = factice.getMetaData().getURL(); 
      url = url.substring(0,url.lastIndexOf("/")); 
      url += "/"+nomBase; 
      connection = DriverManager.getConnection(url,user,pass); 
   }catch(SQLException e){ 
      SQLException sqle = new SQLException("Cr�ation de la base impossible"); 
      sqle.setNextException(e); 
      throw sqle; 
   }finally{ 
      try{statement.close();}catch(Exception e){} 
   } 
   return connection; 
}
Vous pouvez utiliser cette m�thode comme ceci :

Code java : S�lectionner tout
1
2
3
4
5
6
7
8
9
10
Class.forName("com.mysql.jdbc.Driver"); 
String url = "jdbc:mysql://host/baseLien"; 
String user = "user"; 
String pass = "password"; 
// on commence par se connecter � la base factice 
Connection factice = DriverManager.getConnection(url,user,pass); 
// on cr�e la base et on r�cup�re une Connection 
Connection connection = createMysqlDatabase(factice,user,pass,"NouvelleBase"); 
// on peut finalement fermer notre Connection factice qui ne nous sert plus � rien 
factice.close();

Mis � jour le 11 avril 2013 Ioan

Il suffit d'utiliser l'URL suivante :

Code java : S�lectionner tout
jdbc:odbc:;DRIVER=Microsoft Access Driver (*.mdb);DBQ=labase.mdb;
Bien entendu, � la place de � labase �, mettez le chemin complet de votre base (par exemple c:/temp/labase.mdb).

Voici un exemple complet de code pour obtenir une Connection :

Code java : S�lectionner tout
1
2
3
4
5
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
String url= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/temp/thebase.mdb"; 
String user = "user"; 
String pass = "pass"; 
Connection connection = DriverManager.getConnection(url,user,pass);

Pour fonctionner avec Java 64 bit, il est n�cessaire de disposer des drivers Access 2010 en version 64 bit (Microsoft Access Database Engine 2010 Redistributable). Ceux-ci sont incompatibles avec une version 32 bit de la suite Office.

Mis � jour le 11 avril 2013 duj ptitom

Proposer une nouvelle r�ponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plut�t sur le forum de la rubrique pour �a


R�ponse � la question

Liens sous la question
pr�c�dent sommaire
 

Les sources pr�sent�es sur cette page sont libres de droits et vous pouvez les utiliser � votre convenance. Par contre, la page de pr�sentation constitue une �uvre intellectuelle prot�g�e par les droits d'auteur. Copyright � 2025 Developpez Developpez LLC. Tous droits r�serv�s Developpez LLC. Aucune reproduction, m�me partielle, ne peut �tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'� trois ans de prison et jusqu'� 300 000 � de dommages et int�r�ts.