Classe d'outils de base de données Java simple et clôture
Les personnes qui rédigent des applications JDBC ont souvent des maux de tête sur la fermeture des ressources. Ces codes sont ennuyeux. Comment pouvez-vous les fermer avec un code simple? Ci-dessous, j'ai écrit une méthode pour soulager votre douleur:
/ ** * Fermer toutes les ressources fermées * * @param objs Les objets de ressource fermés sont la connexion, l'instruction et le résultat, et d'autres types de ressources sont automatiquement ignorés * / public static void fermeral (objet ... objs) {for (object obj: objs) {if (obj instance de connexion) close ((connexion) obj); if (obj instanceof instruction) close ((instruction) obj); if (obj instanceof resultSet) close ((resultSet) obj); }} Cette méthode a le paramètre "...", qui est en fait une méthode de paramètre variable dans Java 5. Vous pouvez fermer directement l'objet de ressource que vous souhaitez fermer lors de l'appel quel que soit l'ordre ou le numéro. Par exemple:
Catch (sqlexception e) {e.printStackTrace (); } Enfin {dbtools.closeAll (STMT, PSTMT1, PSTMT2, Conn); }
La méthode d'écriture complète de cette classe est donnée ci-dessous:
package com.lavasoft.ibatistools.common; import com.lavasoft.ibatistools.bean.table; import com.lavasoft.ibatistools.metadata.datasourcemetadata; import com.lavasoft.ibatistools.Metadata.mysqldatasourcemetadata; Importer java.io.ioException; import java.io.inputStream; Importer java.sql. *; Importer java.util.list; import java.util.properties; / ** * Connexion de la base de données Java simple et clôture de la classe d'outils * * @Author Leizhimin 11-12-20 4:32 PM * / classe publique DBTOOLS {Private Static String DriverClassName, URL, utilisateur, mot de passe; statique {init (); } private static void init () {inputStream in = dbtools.class.getResourceSstream ("/ com / lavasoft / ibatistools / jdbc.properties"); Properties preps = nouvelles propriétés (); essayez {preps.load (in); DriverClassName = preps.getProperty ("jdbc.driver"); url = preps.getProperty ("jdbc.url"); user = preps.getProperty ("jdbc.Username"); mot de passe = preps.getProperty ("jdbc.password"); } catch (ioException e) {e.printStackTrace (); }} / ** * Créer une connexion JDBC * * @return A JDBC Connection * / Connexion statique publique MakeConnection () {Connexion Conn = NULL; essayez {class.forname (driverClassName); Conn = driverManager.getConnection (URL, utilisateur, mot de passe); } catch (classNotFoundException e) {e.printStackTrace (); } catch (sqlexception e) {e.printStackTrace (); } return conn; } public static void close (connexion conn) {if (conn! = null) try {conn.close (); } catch (sqlexception e) {e.printStackTrace (); }} public static void close (resultSet rs) {if (rs! = null) try {S.close (); } catch (sqlexception e) {e.printStackTrace (); }} public static void close (instruction stmt) {if (stmt! = null) try {stmt.close (); } catch (sqlexception e) {e.printStackTrace (); }} / ** * Fermer toutes les ressources fermées * * @param objs Les objets de ressource fermés sont la connexion, la déclaration et le résultat, et d'autres types de ressources sont automatiquement ignorés * / public static void fermerall (objet ... objs) {for (objet obj: objs) {if (obj instance de connexion) close ((connexion) obj); if (obj instanceof instruction) close ((instruction) obj); if (obj instanceof resultSet) close ((resultSet) obj); }} public static void main (String [] args) {dataSourceMetAdata dbmd = mysqldatasourcemetadata.instatnce (); List <pally> tableList = dbmd.getalltableMetAdata (dbtools.makeConnection ()); pour (table de table: tableliste) {System.out.println (table); }}}
Parce qu'il s'agit d'un outil d'écriture, la connexion est utilisée très quelques fois, donc le mode JDBC est utilisé ici et le pool de connexion n'est pas utilisé. La méthode de clôture est très bonne à utiliser, réduisant la quantité de code et améliorant la fiabilité et la qualité du programme.
Un outil universel JDBC simple
Prend en charge plusieurs bases de données, génère des connexions de manière unifiée et publie des ressources de la manière optimale et la plus simple.
Bienvenue pour prendre des photos!
import org.apache.commons.logging.log; import org.apache.commons.logging.logfactory; Importer java.sql. *; Importer java.util.list; import java.util.properties; / ** * Outil de fonctionnement de la base de données générale, fournissant une acquisition de connexion de base de données, une exécution SQL, une fermeture des ressources et d'autres fonctions. Les bases de données prises en charge sont Oracle10G et MySQL5.x. </p> * * @author Leizhimin 2012-03-05 11:22 * / classe publique dbtoolkit {private static log log = logfactory.getLog (dbtoolkit.class); statique {try {class.forname ("oracle.jdbc.driver.oracledriver"); Class.forname ("com.mysql.jdbc.driver"); } catch (classNotFoundException e) {log.Error ("Une erreur s'est produite en chargeant le pilote de base de données!"); e.printStackTrace (); }} / ** * Créez une connexion de base de données * * @param URL Database Connection URL String * @param Propriétés Liste de toute chaîne TAG / PARES DE VALEUR pour les paramètres de connexion; Habituellement, au moins les propriétés "utilisateur" et "mot de passe" doivent être incluses * @return une connexion de base de données JDBC * @throws SQLEXception lance lorsque la connexion échoue * / Connexion statique publique MakeConnection (URL de chaîne, Propriétés Propriétés) lance Sqlexception {connexion Conn = NULL; essayez {conn = driverManager.getConnection (URL, propriétés); } catch (sqlexception e) {log.Error ("Exception s'est produite lors de l'obtention de la connexion de la base de données", e); jeter e; } return conn; } / ** * Exécuter une requête statique de l'instruction SQL sur une connexion de base de données * * @Param Conn Connection de la base de données * @param statistique statique SQL String SQL * @return return Result set objet ResultSet * @throws SQLEXception lances lancers sqExExed static resultSet rs = null; essayez {// Créer un objet qui exécute l'instruction SQL STMT = Conn.CreatEstatement (); // Exécuter SQL et obtenir le résultat de retour rs = stmt.ExecuteQuery (statistique); } catch (sqlexception e) {Log.Error ("Une erreur s'est produite lors de l'exécution de l'instruction SQL, veuillez vérifier! / n" + statistique); jeter e; } return rs; } / ** * Exécuter une instruction SQL statique sur une connexion de base de données * * @Param Conn Connection de la base de données * @param statistique statique SQL String string * @Throws SQLEXception lance lors de l'exécution de l'exception * / public static void execUteSQL (connexion Conn, String statisticsql) lance SQException {State STMT = NULL; essayez {// Créez un objet qui exécute SQL STMT = Conn.CreatEstatement (); // Exécuter SQL et obtenir le résultat renvoyé STMT.Execute (StateCSQL); } catch (sqlexception e) {log.Error ("Une erreur s'est produite lors de l'exécution des instructions SQL, veuillez vérifier! / n" + statistique); jeter e; } enfin {close (stmt); }} / ** * Exécutez un lot d'instructions SQL statiques sur une connexion de base de données * * @Param Conn Connection de la base de données * @param sqllist static sql instruction String Collection * @Throws SQLEXception lance, lors de l'exécution d'exception * / public static exectutebatchsql (Connection Conn, list <string> sqllist) throw STMT = Conn.CreateStatement (); pour (String SQL: SQLLIST) {stmt.addbatch (sql); } // Exécuter SQL et obtenir le résultat de retour stmt.executebatch (); } catch (sqlexception e) {Log.Error ("Une erreur s'est produite lors de l'exécution d'une instruction SQL par lots, veuillez vérifier!"); jeter e; }} / ** * Get Oracle Data A Séquence spécifiée Valeur suivante * * @Param Conn Database Connection * @Param Seq_Name Nom de séquence * @return Sequence Next Valeur * / public static Long SequenceNeNExtVal (Connexion Conn, String Seq_name) {Long Val = -1l; Déclaration stmt = null; ResultSet rs = null; essayez {// Créez un objet qui exécute SQL STMT = Conn.CreatEstatement (); // Exécuter SQL et obtenir le résultat de retour rs = stmt.ExecuteQuery ("SELECT" + SEQ_NAME + ".NextVal From Dual"); if (Rs.Next ()) Val = Rs.GetLong (1); } catch (sqlexception e) {log.Error ("# error #: il y a eu une erreur pour obtenir la valeur de séquence, veuillez vérifier! / n" + seq_name); e.printStackTrace (); Jetez une nouvelle RuntimeException (E); } enfin {close (rs); Close (STMT); } return val; } / ** * Fermer toutes les ressources JDBC fermées, quel que soit l'ordre, peuvent toujours être exécutées dans l'ordre correct * * @param objs Les objets de ressource fermés sont la connexion, la déclaration et le résultat, et d'autres types de ressources sont automatiquement ignorés * / public static void closeall (objet ... objs) {pour (objet obj: objs) if (obj instance de résultat) closet) closet) fermer ((résultat) obj); pour (objet obj: objs) if (obj instanceof instruction) close ((instruction) obj); pour (objet obj: objs) if (obj instanceof connection) close ((connexion) obj); } private static void close (connexion conn) {if (conn! = null) try {conn.close (); } catch (sqlexception e) {log.Error ("Exception s'est produite lors de la fermeture de la connexion de la base de données!"); }} private static void close (resultSet rs) {if (rs! = null) try {rs.close (); } catch (sqlexception e) {log.Error ("Exception s'est produite lors de la fermeture du jeu de résultats!"); }} private static void close (instruction stmt) {if (stmt! = null) try {stmt.close (); } catch (sqlexception e) {log.Error ("Exception s'est produite lors de la fermeture de l'instruction SQL!"); }} / ** * Code de test, inutile * * @param args * @throws sqlexception * / public static void main (String [] args) lève Sqlexception {string tns = "jdbc: oracle: mince: @ / n" + "(description = / n" + "/ t (adresse_liste = / n" + "/t/t(Address=(protoCol=tcp)(host=10.87.30.44)(PORT=1521))/N" + "/t/t(Address=(protocol=tcp)(host=10.87.30.45)(PORT=1521)/N" + "/t/t(address=(protocol=tcp)(host=10.87.30.46)(port=1521))/n" + "/t/t(load_balance=yes)/n" + "/t)/n" + "/t(connect_data =/n" + "/t/t(service_name=KFCS)/n" + "/t/t(failover_mode = / n "+" / t / t / t (type = session) / n "+" / t / t / t (méthode = basic) / n "+" / t / t / t (rétrontes = 5) / n "+" / t / t / t (delay = 15) / n "+" / t / t) / n "+" / t) / n "+" / t) / n "+") "; Propriétés p_ora = new Properties (); p_ora.put ("utilisateur", "base"); p_ora.put ("mot de passe", "1qaz! qaz"); p_ora.put ("internal_logon", "normal"); Connexion Ora_Conn = makeConnection (tns, p_ora); ResultSet RS1 = Ora_Conn.CreatEstatement (). EXECUTEQUERY ("SELECT COUNT (1) FROM BASE.CFG_STATIC_DATA"); rs1.next (); System.out.println (rs1.getInt (1)); rs1.close (); ora_conn.close (); Propriétés p_mysql = new Properties (); p_mysql.put ("utilisateur", "root"); p_mysql.put ("mot de passe", "leizm"); String url = "jdbc: mysql: // localhost: 3306 / tdmc"; Connexion mysql_conn = makeconnection (URL, p_mysql); ResultSet rs2 = mysql_conn.creatEstatement (). ExecuteQuery ("SELECT COUNT (1) FROM CFG_CODE"); rs2.Next (); System.out.println (rs2.getInt (1)); rs2.close (); mysql_conn.close (); }}