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.
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); } |
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.
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; } |
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(); |
Il suffit d'utiliser l'URL suivante :
Code java : | Sélectionner tout |
jdbc:odbc:;DRIVER=Microsoft Access Driver (*.mdb);DBQ=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.
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 çaLes 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 © 2024 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.