Tout comme un objet de connexion crée une instruction et des objets PréparedStatement, il crée également des objets callableStatement qui seront utilisés pour exécuter la procédure stockée de la base de données.
Créer un objet callableStatement:
Supposons que les procédures stockées par Oracle suivantes doivent être exécutées:
Créer ou remplacer la procédure getEmpName (emp_id en nombre, emp_first out varchar) asbegin sélectionnez d'abord dans emp_first dans les employés où id = emp_id; end;
Remarque: Le ci-dessus a écrit des procédures stockées par Oracle, mais nous utilisons la base de données MySQL, rédigeant les mêmes procédures stockées pour MySQL comme suit, la créant dans la base de données EMP:
Delimiter $$ DROP Procédure Si existe `EMP`.`GetEmpName` $$ Créer la procédure` EMP`.`GETEMPNAME` (dans EMP_ID INT, OUT EMP_FIRST VARCHAR (255)) Commencez d'abord à sélectionner dans EMP_FIRST à partir des employés où ID = EMP_ID; end $$ Delimiter;
Il existe trois types de paramètres: dans, out et inout. L'objet PréparedStatement utilise uniquement dans le paramètre. L'objet callableStatement peut utiliser les trois.
Voici chaque définition:
L'extrait de code suivant montre comment instancier un objet callableStatement en fonction de la procédure stockée ci-dessus à l'aide de la méthode connexion.prepareCall ():
CallableStatement cstmt = null; try {String sql = "{call getEmpName (?,?)}"; CSTMT = Conn.PrepareCall (SQL); . . .} Catch (Sqlexception e) {. . .} enfin { . . .}Le SQL de la variable de chaîne représente une procédure stockée, en utilisant les espaces réservés des paramètres.
L'utilisation d'un objet callableStAlement utilise un objet préparé. La valeur doit être liée à tous les paramètres avant d'exécuter l'instruction, sinon une conception SQELLE sera reçue.
S'il y a un paramètre dans, suivez simplement les mêmes règles et astuces qui s'appliquent à l'objet PréparedStatement; Utilisez la méthode setxxx () correspondant au type de données Java à limiter.
Lorsque vous utilisez des paramètres OUT et InOut, RegisterOutArAmètre () avec la méthode CallableStation supplémentaire doit être utilisé. Méthode RegisteroutParAmètre () JDBC Type de données lié à la procédure stockée renvoyée par le type de données.
Une fois la procédure stockée appelée, la valeur est récupérée à l'aide des paramètres de sortie de la méthode getxxx (). Cette méthode jette des valeurs de type SQL pour récupérer les types de données Java.
Fermez l'objet callablestatement:
Tout comme la fermeture des autres objets de déclaration, l'objet callableStatement doit également être fermé pour la même raison.
Un simple appel à la méthode close () fera le travail. Si l'objet de connexion est fermé en premier, il fermera également l'objet callableStatement. Cependant, l'objet callableStatement doit toujours être explicitement fermé pour assurer un dégagement correct.
CallableStatement cstmt = null; try {String sql = "{call getEmpName (?,?)}"; CSTMT = Conn.PrepareCall (SQL); . . .} Catch (Sqlexception e) {. . .} Enfin {cstmt.close ();} PS: instance d'objet callableStatement
Voici un exemple d'une procédure stockée MySQL utilisant CallableStatement avec le getEmpName suivant:
Veuillez vous assurer que la procédure stockée a été créée dans la base de données EMP. Cela peut être fait en utilisant le navigateur de requête MySQL.
Delimiter $$ DROP Procédure Si existe `EMP`.`GetEmpName` $$ Créer la procédure` EMP`.`GETEMPNAME` (dans EMP_ID INT, OUT EMP_FIRST VARCHAR (255)) Commencez d'abord à sélectionner dans EMP_FIRST à partir des employés où ID = EMP_ID; end $$ Delimiter;
Ce code de script a été écrit en fonction de l'installation de l'environnement et de la base de données dans le chapitre précédent.
Copiez l'exemple suivant jdbcexample.java, compilez et exécutez comme indiqué ci-dessous:
// Étape 1. Importez les packages requis Import Java.sql. *; Classe publique JDBCExample {// JDBC Nom du pilote et URL de la base de données State Final String jdbc_driver = "com.mysql.jdbc.driver"; chaîne finale statique db_url = "jdbc: mysql: // localhost / emp"; // les informations d'identification de la base de données static final string user = "username"; String statique final pass = "mot de passe"; public static void main (String [] args) {connexion conn = null; CallableStatement stmt = null; essayez {// étape 2: registre jdbc driver class.forname ("com.mysql.jdbc.driver"); // Étape 3: Ouvrez un système de connexion.out.println ("Connexion à la base de données ..."); Conn = driverManager.getConnection (db_url, utilisateur, pass); // Étape 4: Exécuter un système de requête.out.println ("Création de déclaration ..."); String sql = "{appel getEmpName (?,?)}"; STMT = Conn.PrepareCall (SQL); // lier d'abord dans le paramètre, puis lier le paramètre int empid = 102; stmt.sentInt (1, empid); // Cela définirait l'ID 102 // parce que le deuxième paramètre est sorti, alors enregistrez-le stmt.registerOutParameter (2, java.sql.types.varchar); // Utilisez la méthode d'exécution pour exécuter la procédure stockée. System.out.println ("Exécution de la procédure stockée ..."); stmt.execute (); // Récupérer le nom de l'employé avec Getxxx Method String empname = stmt.getString (2); System.out.println ("nom Emp avec id:" + empid + "est" + empname); stmt.close (); conn.close (); } catch (sqlexception se) {// gérer les erreurs pour jdbc se.printStackTrace (); } catch (exception e) {// Gire les erreurs pour class.forname e.printStackTrace (); } Enfin {// Enfin Block utilisé pour fermer les ressources essayez {if (stmt! = null) stmt.close (); } catch (sqlexception se2) {} // Rien que nous ne pouvons essayer {if (conn! = null) Conn.close (); } catch (sqlexception se) {se.printStackTrace (); } // fin enfin essayez} // fin essayez System.out.println ("Goodbye!"); } // fin main} // fin jdbcexampleCompilez maintenant l'exemple ci-dessus comme suit:
C:> javac jdbcexample.java
Lors de l'exécution de Jdbcexample, il produit les résultats suivants:
C:> java jdbcexample
Connexion à la base de données ... Création d'instruction ... Exécution de la procédure stockée ... Nom EMP avec ID: 102 est ZaidgoodBye!
Syntaxe SQL Escape de JDBC:
La syntaxe Escape permet la flexibilité d'utiliser certaines fonctionnalités de la base de données en utilisant des méthodes et des propriétés JDBC standard.
Le format général de syntaxe SQL Escape est le suivant:
{mot-clé 'Paramètres'}Voici les éléments suivants qui seront très utiles pendant la programmation JDBC:
D, T, TS Mots-clés:
Ils aident à déterminer le texte de la date, de l'heure et de l'horodatage. Comme vous le savez, il n'y a pas deux systèmes de gestion de base de données basés sur le temps et la date de la même manière. Cette syntaxe d'échappement indique au pilote le format, la date ou le temps de rendre à la base de données cible. Exemple d'implémentation:
{d 'yyyy-mm-dd'}où yyyy = an, mm = mois, dd = jour. L'utilisation de cette syntaxe {D '2009-09-03'} est le 9 mars 2009.
Voici un exemple simple de la façon d'insérer une table de date:
// Créer une déclaration objetStmt = conn.creatEstatement (); // Insérer des données ==> id, prénom, nom de famille, DOBSTRING SQL = "INSERT INTO SUMSURES VALEURS" + "(100, 'Zara', 'Ali', {D '2001-12-16'})"; STMT.ExecuUpdate (SQL);De même, l'une des deux syntaxes suivantes peut être utilisée, que ce soit T ou TS:
{T 'HH: MM: SS'}où Hh = heures, mm = minutes, ss = secondes. L'utilisation de cette syntaxe {t '13: 30: 29 '} est 13h30 29 pm.
{ts 'yyyy-mm-dd hh: mm: ss'}Ce sont les deux syntaxes «D» et «T» ci-dessus pour représenter la syntaxe de combinaison horodato.
Échappez des mots clés:
Ce mot-clé identifie le caractère échappé utilisé dans la clause similaire. Utile lors de l'utilisation de SQL Wildcard% où des caractères zéro ou plus sont appariés. Par exemple:
String sql = "SELECT SYMBOLD FROM MATHSYMBOLS Où symbole comme '/%' {Escape ''}"; stmt.ExECUTE (SQL);Si vous utilisez le personnage de barre arrière () comme personnage d'échappement, vous devez également utiliser deux caractères de barre arrière dans le littéral Java String, car l'arrière-plan est également un personnage de Java Escape.
Mots-clés FN:
Ce mot-clé signifie l'utilisation de fonctions scalaires dans les SGBD. Par exemple, vous pouvez utiliser la fonction de longueur SQL pour calculer la longueur d'une chaîne GE:
{Fn Length ('Hello World')}Cela reviendra 11, la longueur de la chaîne «Hello World». .
Appelez les mots clés:
Ce mot-clé est utilisé pour appeler les procédures stockées. Par exemple, pour une procédure stockée, vous avez besoin d'un paramètre dans, utilisez la syntaxe suivante:
{appel my_procedure (?)};Pour une procédure stockée, un paramètre In est requis et un paramètre OUT est renvoyé, en utilisant la syntaxe suivante:
{? = appeler my_procedure (?)}; Mots-clés OJ:
Ce mot-clé est utilisé pour représenter une jointure externe. La syntaxe est la suivante:
{oj extérieur-join}Table de jointure externe = {gauche | À droite | Full} jointure externe {Table | Join externe} Critères de recherche. Par exemple:
String sql = "Select Employey From {oj thistable droite extérieure jointe thatTable sur id = '100'}"; stmt.execUte (sql);