Einfache Java -Datenbankverbindung und Schließwerkzeugklasse
Personen, die JDBC -Anwendungen schreiben, haben häufig Kopfschmerzen zum Schließen von Ressourcen. Diese Codes sind langweilig. Wie können Sie sie mit einfachem Code schließen? Im Folgenden habe ich eine Methode geschrieben, um Ihren Schmerz zu lindern:
/ *** Schließen Sie alle geschlossenen Ressourcen** @param objs Die Objekte für geschlossene Ressourcen sind Verbindung, Anweisung und Ergebnis, und andere Arten von Ressourcen werden automatisch ignoriert*/ public static void closeAll (Objekt ... objs) {für (Objekt obj: objs) {if (obj Instance von Verbindung) ((Verbindung) OBJ); if (obj Instance von Aussage) schließen ((Aussage) obj); if (obj Instance von Ergebnis) schließen ((Ergebnis) obj); }} Diese Methode enthält den Parameter "...", bei dem es sich tatsächlich um eine variable Parametermethode in Java 5 handelt. Sie können das Ressourcenobjekt, das Sie beim Aufrufen unabhängig von der Reihenfolge oder der Nummer schließen möchten, direkt schließen. Zum Beispiel:
catch (sqlexception e) {e.printstacktrace (); } endlich {DBTOOLS.CLOSEALL (STMT, PSTMT1, PSTMT2, Conn); }
Die vollständige Schreibmethode dieser Klasse ist unten angegeben:
Paket com.lavasoft.ibatistools.common; import com.lavasoft.ibatistools.bean.table; import com.lavasoft.ibatistools.metadata.datasourcemetadata; import com.lavasoft.ibatistools.metadata.mysqldatasourcemetadata; importieren java.io.ioException; importieren java.io.inputstream; Java.sql.*importieren; importieren java.util.list; Import Java.util.Properties; / ** * Einfache Java-Datenbankverbindung und Schließwerkzeugklasse * * @Author Leizhimin 11-12-20 16:32 PM */ Public Class DBTOOLS {private statische String-TreiberClassName, URL, Benutzer, Passwort; static {init (); } private static void init () {InputStream in = dbtools.class.getResourceAsStream ("/com/lavasoft/ibatistools/jdbc.properties"); Eigenschaften preps = neue Eigenschaften (); probieren {preps.load (in); DriverClassName = preps.getProperty ("jdbc.driver"); url = preps.getProperty ("jdbc.url"); user = preps.getProperty ("jdbc.username"); password = preps.getProperty ("jdbc.password"); } catch (ioException e) {e.printstacktrace (); }} / *** Erstellen Sie eine JDBC -Verbindung** @return eine JDBC -Verbindung* / public statische Verbindung makeConnection () {Connection conn = null; try {class.forname (TRAVERCLASSNAME); conn = driverManager.getConnection (URL, Benutzer, Passwort); } catch (classNotFoundException e) {e.printstacktrace (); } catch (sqlexception e) {e.printstacktrace (); } return conn; } public static void close (Verbindung conn) {if (conn! = null) try {conn.close (); } catch (sqlexception e) {e.printstacktrace (); }} public static void close (resultset rs) {if (rs! = null) try {rs.close (); } catch (sqlexception e) {e.printstacktrace (); }} public static void close (Anweisung stmt) {if (stmt! = null) try {stmt.close (); } catch (sqlexception e) {e.printstacktrace (); }} / *** Schließen Sie alle geschlossenen Ressourcen** @param objs Die geschlossenen Ressourcenobjekte sind Verbindung, Anweisung und Ergebnis, und andere Arten von Ressourcen werden automatisch ignoriert. if (obj Instance von Aussage) schließen ((Aussage) obj); if (obj Instance von Ergebnis) schließen ((Ergebnis) obj); }} public static void main (String [] args) {DataSourcemetadata dbmd = mysqldatasourcemetadata.instatnce (); LIST <Tabelle> tabellist = dbmd.getAllTablemetadata (DBTOOLS.MAKECONNECTION ()); für (Tabelle Tabelle: Tablelist) {System.out.println (Tabelle); }}}
Da es sich um ein Schreibwerkzeug handelt, wird die Verbindung nur sehr wenige Male verwendet, sodass der JDBC -Modus hier verwendet wird und der Verbindungspool nicht verwendet wird. Die Abschlussmethode ist sehr gut zu verwenden, die die Codemenge verringert und die Zuverlässigkeit und Qualität des Programms verbessert.
Ein einfaches JDBC Universal Tool
Unterstützt mehrere Datenbanken, generiert auf einheitliche Weise Verbindungen und veröffentlicht Ressourcen auf optimale und einfachste Weise.
Willkommen zu fotografieren!
import org.apache.commons.logging.log; import org.apache.commons.logging.logfactory; Java.sql.*importieren; importieren java.util.list; Import Java.util.Properties; /*** Allgemeines Datenbankbetriebstool, Bereitstellung von Datenbankverbindungserfassung, SQL -Ausführung, Ressourcenschließung und anderen Funktionen. Die unterstützten Datenbanken sind Oracle10g und MySQL5.x. </ P> * * @author leizhimin 2012-03-05 11:22 */ Public Class DBTOOLKIT {private static log log = logFactory.getLog (DBTOOLKIT.CLASS); static {try {class.forname ("oracle.jdbc.driver.oracledriver"); Class.forname ("com.mysql.jdbc.driver"); } catch (classNotFoundException e) {log.Error ("Es ist ein Fehler beim Laden des Datenbank -Treibers!"); E. printstacktrace (); }} /** * Erstellen einer Datenbankverbindung * * @param URL -Datenbankverbindung URL -Zeichenfolge * @param Eigenschaftenliste aller String -Tag /Wertpaare für die Verbindungsparameter; Normalerweise sollten mindestens "Benutzer" und "Kennwort" Eigenschaften enthalten sein. try {conn = driverManager.getConnection (URL, Eigenschaften); } catch (SQLEXception e) {log.Error ("Ausnahme beim Erhalten der Datenbankverbindung", e); werfen e; } return conn; } /** * Execute a static SQL statement query on a database connection* * @param conn Database connection* @param staticSql static SQL statement string* @return Return query result set ResultSet object* @throws SQLException Throws when executing exception*/ public static ResultSet executeQuery(Connection conn, String staticSql) throws SQLException { ResultSet rs = null; Versuchen Sie {// Erstellen Sie ein Objekt, das SQL Anweisung STMT = Conn.CreateStatement () ausführt; // SQL ausführen und das Rückgabeergebnis RS = STMT.ExecuteQuery (StaticsQL) abrufen; } catch (SQLEXception e) {log.Error ("Ein Fehler beim Ausführen der SQL -Anweisung, bitte überprüfen Sie! /n" + Staticsql); werfen e; } return rs; } / *** Führen Sie eine statische SQL -Anweisung in einer Datenbankverbindung aus** @param conn Datenbankverbindung* @param StaticsQL statische SQL -Anweisung String* @throws SQLEXception löscht aus, wenn die Ausnahme von Ausnahme ausgeführt wird. Versuchen Sie {// Erstellen Sie ein Objekt, das SQL STMT = Conn.CreateStatement () ausführt; // SQL ausführen und das Ergebnis erhalten. } catch (SQLEXception e) {log.Error ("Ein Fehler beim Ausführen von SQL -Anweisungen, bitte überprüfen Sie! /n" + Staticsql); werfen e; } endlich {close (stmt); }} /*** Führen Sie eine Stapel statischer SQL -Anweisungen auf einer Datenbankverbindung aus** @param conn Datenbankverbindung* @param SQllist Static SQL Anweisung String Collection* @throws SQLEXception Auslöscht, wenn die Ausnahme von Ausnahme ausführen. STMT = Conn.CreateStatement (); für (String SQL: SQllist) {stmt.addbatch (SQL); } // SQL ausführen und das Rückgabeergebnis sstmt.executebatch () abrufen; } catch (sqlexception e) {log.Error ("Ein Fehler beim Ausführen einer Batch SQL -Anweisung, bitte überprüfen Sie!"); werfen e; }} / *** Oracle -Daten abrufen Eine angegebene Sequenz Nächster Wert** @param conn database Connection* @param seq_name Sequenzname* @return Sequence Nächster Wert* / public static longeCeNextVal (Verbindung conn, String SEQ_Name) {long val = -1l; Aussage STMT = NULL; ResultSet rs = null; Versuchen Sie {// Erstellen Sie ein Objekt, das SQL STMT = Conn.CreateStatement () ausführt; // SQL ausführen und das Rückgabeergebnis RS = STMT.ExecuteQuery ("SELECT" + SEQ_NAME + ".NEXTVAL VON DUAL"); if (rs.Next ()) val = rs.getLong (1); } catch (SQLEXception e) {log.Error ("#Fehler#: Es gab einen Fehler beim Erhalten des Sequenzwerts, bitte überprüfen Sie! /n" + seq_name); E. printstacktrace (); neue runimeexception (e) werfen; } endlich {close (rs); schließen (STMT); } return val; } / *** Schließen Sie alle geschlossenen JDBC -Ressourcen, unabhängig von der Reihenfolge, immer in der richtigen Reihenfolge ausgeführt. für (Objekt OBJ: OBJs) if (obj Instance von Aussage) schließen ((Aussage) obj); für (Objekt obj: objs) if (obj Instance von Verbindung) schließen ((Verbindung) obj); } private static void close (Verbindung conn) {if (conn! = null) try {conn.close (); } catch (sqlexception e) {log.Error ("Ausnahme beim Schließen der Datenbankverbindung!"); }} private static void close (resultset rs) {if (rs! = null) try {rs.close (); } catch (sqlexception e) {log.Error ("Ausnahme beim Schließen des Ergebnisssatzes!"); }} private static void close (Anweisung stmt) {if (stmt! = null) try {stmt.close (); } catch (sqlexception e) {log.Error ("Ausnahme beim Schließen der SQL -Anweisung!"); }}/** * Testcode, nutzlos * * @param args * @throws sqlexception */public static void main (String [] args) löst SQLEXception aus {String tns = "Jdbc: oracle: dünn: @/n" + "(Beschreibung "/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/t/t/t/t/t/t/t/t/t/t/t/t (service_name =/n " +"/t/t/t (type = session)/n " +"/t/t/t (methode = basic)/n " +"/t/t/t (retries = 5)/n " +"/t/t/t (delay = 15)/n " +"/t/t)/n " +"/t)/t)/n "/t)/n" +) "; Eigenschaften p_ora = neue Eigenschaften (); p_ora.put ("Benutzer", "Basis"); p_ora.put ("Passwort", "1Qaz! Qaz"); p_ora.put ("interne_logon", "normal"); Verbindung ora_conn = makeConnection (tns, p_ora); ResultSet rs1 = ora_conn.createStatement (). ExecuteQuery ("Wählen Sie zählen (1) von base.cfg_static_data"); rs1.next (); System.out.println (rs1.getint (1)); RS1.CLOSE (); ora_conn.close (); Eigenschaften p_mysql = neue Eigenschaften (); p_mysql.put ("user", "root"); p_mysql.put ("Passwort", "leizm"); String url = "jdbc: mysql: // localhost: 3306/tdmc"; Verbindung mySQL_Conn = makeConnection (URL, p_mysql); ResultSet rs2 = mysql_conn.createStatement (). ExecuteQuery ("Wählen Sie Graf (1) aus cfg_code"); rs2.next (); System.out.println (rs2.getint (1)); rs2.close (); mysql_conn.close (); }}