Koneksi Database Java Sederhana dan Kelas Alat Penutupan
Orang yang menulis aplikasi JDBC sering memiliki sakit kepala tentang sumber daya penutupan. Kode -kode ini membosankan. Bagaimana Anda bisa menutupnya dengan kode sederhana? Di bawah ini saya telah menulis metode untuk menghilangkan rasa sakit Anda:
/ *** Tutup semua sumber daya tertutup** @param Objs Objek sumber daya tertutup adalah koneksi, pernyataan, dan hasil, dan jenis sumber daya lainnya secara otomatis diabaikan*/ public static void closeall (objek ... objs) {untuk (objek obj: objs) {if (instance connection dari connection) tutup (koneksi) obj); if (obj instance dari pernyataan) tutup ((pernyataan) obj); if (obj instance dari resultet) tutup ((hasil) obj); }} Metode ini memiliki parameter "...", yang sebenarnya merupakan metode parameter variabel di Java 5. Anda dapat langsung menutup objek sumber daya yang ingin Anda tutup saat memanggil terlepas dari urutan atau nomor. Misalnya:
catch (sqlexception e) {e.printstacktrace (); } akhirnya {dbtools.closeall (stmt, pstmt1, pstmt2, conn); }
Metode penulisan lengkap kelas ini diberikan di bawah ini:
paket com.lavasoft.iatistools.common; impor com.lavasoft.iatistools.bean.table; impor com.lavasoft.iatistools.metadata.datasourcemetadata; impor com.lavasoft.iatistools.metadata.mysqldatasourcemetadata; impor java.io.ioException; impor java.io.inputstream; impor java.sql.*; impor java.util.list; impor java.util.properties; / ** * Koneksi database Java sederhana dan kelas alat penutup * * @author leizhimin 11-12-20 4:32 pm */ kelas publik dbtools {private string driverclassName, url, pengguna, kata sandi; static {init (); } private static void init () {inputStream in = dBtools.class.getResourceAsstream ("/com/lavasoft/ibatistools/jdbc.properties"); Properti Preps = Properti Baru (); coba {preps.load (in); driverclassname = preps.getProperty ("jdbc.driver"); url = preps.getproperty ("jdbc.url"); user = preps.getproperty ("jdbc.username"); kata sandi = preps.getproperty ("jdbc.password"); } catch (ioException e) {e.printstacktrace (); }} / *** Buat koneksi JDBC** @return A JDBC Connection* / Public Static Connection MakeConnection () {Connection conn = null; coba {class.forname (driverclassName); conn = driverManager.getConnection (url, pengguna, kata sandi); } catch (ClassNotFoundException e) {E.PrintStackTrace (); } catch (sqlexception e) {e.printstacktrace (); } return conn; } public static void tutup (koneksi conn) {if (conn! = null) coba {conn.close (); } catch (sqlexception e) {e.printstacktrace (); }} public static void tutup (hasil rs) {if (rs! = null) coba {rs.close (); } catch (sqlexception e) {e.printstacktrace (); }} public static void tutup (pernyataan stmt) {if (stmt! = null) coba {stmt.close (); } catch (sqlexception e) {e.printstacktrace (); }} / *** Tutup semua sumber daya tertutup** @param Objs Objek sumber daya tertutup adalah koneksi, pernyataan, dan hasil, dan jenis sumber daya lainnya secara otomatis diabaikan* / public static void closeAll (objek ... objs) {untuk (objek obj: objs) {if (instance Obj dari koneksi) tutup ((koneksi) obj); if (obj instance dari pernyataan) tutup ((pernyataan) obj); if (obj instance dari resultet) tutup ((hasil) obj); }} public static void main (string [] args) {DataSourCeMetadata dbmd = mysqldataSourCemetadata.instatnce (); Daftar <ablel> TableList = dbmd.getAlltableMetadata (dbtools.makeConnection ()); untuk (tabel tabel: TableList) {System.out.println (tabel); }}}
Karena ini adalah alat penulisan, koneksi digunakan sangat beberapa kali, sehingga mode JDBC digunakan di sini, dan kumpulan koneksi tidak digunakan. Metode penutupan sangat baik untuk digunakan, mengurangi jumlah kode dan meningkatkan keandalan dan kualitas program.
Alat Universal JDBC sederhana
Mendukung banyak database, menghasilkan koneksi dengan cara terpadu, dan melepaskan sumber daya dengan cara yang optimal dan paling sederhana.
Selamat datang untuk mengambil gambar!
impor org.apache.commons.logging.log; impor org.apache.commons.logging.logfactory; impor java.sql.*; impor java.util.list; impor java.util.properties; /*** Alat operasi basis data umum, menyediakan akuisisi koneksi basis data, eksekusi SQL, penutupan sumber daya dan fungsi lainnya. Basis data yang didukung adalah Oracle10g dan MySQL5.X. </p> * * @author leizhimin 2012-03-05 11:22 */ kelas publik dbtoolkit {log private static log = logfactory.getLog (dbtoolkit.class); static {try {class.forname ("oracle.jdbc.driver.oracledRiver"); Class.forname ("com.mysql.jdbc.driver"); } catch (classNotFoundException e) {log.error ("Kesalahan terjadi memuat driver basis data!"); e.printstacktrace (); }} /** * Buat koneksi database * * @param URL koneksi database URL string * @param Daftar properti dari setiap tag /pasangan nilai untuk parameter koneksi; Biasanya setidaknya properti "pengguna" dan "kata sandi" harus disertakan * @return koneksi database JDBC * @throws SQlexception lemparan ketika koneksi gagal */ koneksi statis public Makesconnection (string url, properti properti) melempar sqlexception {connection conn = null; coba {conn = driverManager.getConnection (url, properties); } catch (sqlexception e) {log.error ("Pengecualian terjadi saat mendapatkan koneksi basis data", e); lempar e; } return conn; } / *** Jalankan kueri pernyataan SQL statis pada koneksi database** @param conn koneksi database* @param staticsql static SQL Pernyataan string* @return return query query atur hasil hasil @throws sqlexception saat menjalankan pengecualian* / public staticet executeQuery (connection connow = string staticsception) coba {// Buat objek yang menjalankan pernyataan SQL stmt = conn.createStatement (); // Jalankan SQL dan dapatkan hasil pengembalian rs = stmt.executeQuery (staticsql); } catch (sqlexception e) {log.error ("Terjadi kesalahan saat menjalankan pernyataan SQL, silakan periksa! /n" + staticsql); lempar e; } return rs; } / *** Jalankan pernyataan SQL statis pada koneksi database** @param conn koneksi database* @param staticsql static SQL pernyataan string* @throws sqlexception lemparan saat mengeksekusi pengecualian* / public static void (connection conn, string staticsql) melempar sqlexception {public stmt = connection conn, string staticsql) melempar sqlexception {public stmt = connection = NULL; coba {// Buat objek yang mengeksekusi sql stmt = conn.createStatement (); // Jalankan SQL dan dapatkan hasilnya yang dikembalikan stmt.execute (staticsql); } catch (sqlexception e) {log.error ("Terjadi kesalahan saat menjalankan pernyataan SQL, silakan periksa! /n" + staticsql); lempar e; } akhirnya {tutup (stmt); } } /** * Execute a batch of static SQL statements on a database connection* * @param conn Database connection* @param sqlList Static SQL statement string collection* @throws SQLException Throws when executing exception*/ public static void executeBatchSQL(Connection conn, List<String> sqlList) throws SQLException { try { //Create an object that executes Pernyataan SQL STMT = Conn.CreateStatement (); untuk (string sql: sqllist) {stmt.addbatch (sql); } // Jalankan SQL dan dapatkan hasil pengembalian stmt.executeBatch (); } catch (sqlexception e) {log.error ("Terjadi kesalahan saat menjalankan pernyataan SQL batch, silakan periksa!"); lempar e; }} / *** Dapatkan data oracle urutan nilai selanjutnya*** @param conn koneksi database* @param seq_name Nama urutan* @Return Nilai Next Nilai* / Public Static Long SequencenextVal (koneksi koneksi, string seq_name) {long val = -1l; Pernyataan stmt = null; Hasil rs = null; coba {// Buat objek yang mengeksekusi sql stmt = conn.createStatement (); // Jalankan SQL dan dapatkan hasil pengembalian rs = stmt.executeQuery ("pilih" + seq_name + ".nextval dari dual"); if (rs.next ()) val = rs.getlong (1); } catch (sqlexception e) {log.error ("#error#: ada kesalahan dalam mendapatkan nilai urutan, silakan periksa! /n" + seq_name); e.printstacktrace (); Lempar RuntimeException baru (E); } akhirnya {tutup (rs); tutup (stmt); } return val; } / *** Tutup semua sumber daya JDBC tertutup, terlepas dari ketertiban, selalu dapat dieksekusi dalam urutan yang benar** @param obj Objek sumber daya tertutup adalah koneksi, pernyataan, dan hasil, dan jenis sumber daya lainnya secara otomatis diabaikan* / public static closeall (objek ... OBJS) {for (objek OBJ: OBJS) IF (OBJS); untuk (objek obj: objs) if (obj instance dari pernyataan) tutup ((pernyataan) obj); untuk (objek obj: objs) if (obj instance dari koneksi) tutup ((koneksi) obj); } private static void tutup (koneksi conn) {if (conn! = null) coba {conn.close (); } catch (sqlexception e) {log.error ("Pengecualian terjadi saat menutup koneksi database!"); }} private static void close (resultset rs) {if (rs! = null) coba {rs.close (); } catch (sqlexception e) {log.error ("Pengecualian terjadi saat menutup hasil yang ditetapkan!"); }} private static void tutup (pernyataan stmt) {if (stmt! = null) coba {stmt.close (); } catch (sqlexception e) {log.error ("Pengecualian terjadi saat menutup pernyataan SQL!"); }}/** * Kode uji, tidak berguna * * @param args * @throws sqlexception */public static void main (string [] args) melempar sqlexception {string tns = "jdbc: oracle: tipis: @/n" + "(description =/n" + "/t (address_list =/n" "/t/t(address=(protocol=tcp)(Host=10.87.30.44)(port=1521)/n" + "/t/t(address=(protocol=tcp)(10.87.30.45 ))(port=1521)/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/ "/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 = sesi)/n " +"/t/t/t (metode = dasar)/n " +"/t/t/t (retries = 5)/n " +"/t/t/t (tunda = 15)/n " +"/t/t)/n " +"/t)/n " +"/t)/t)/T)/n "/n"/t)/n " +"/t)/n "/t)" "/n"/t)/n " +"/t)/t)/T) "" "/T)/N" + "/T)/T)/T)" "" "/T)/N" + "/T)/N" Properti p_ora = properti baru (); p_ora.put ("user", "base"); p_ora.put ("kata sandi", "1Qaz! Qaz"); p_ora.put ("internal_logon", "normal"); Koneksi ora_conn = makeConnection (tns, p_ora); Hasil rs1 = ora_conn.createestatement (). ExecuteQuery ("pilih count (1) dari base.cfg_static_data"); rs1.next (); System.out.println (rs1.getint (1)); rs1.close (); ora_conn.close (); Properti p_mysql = properti baru (); p_mysql.put ("user", "root"); p_mysql.put ("kata sandi", "leizm"); String url = "jdbc: mysql: // localhost: 3306/tdmc"; Koneksi mysql_conn = makeConnection (url, p_mysql); Hasil rs2 = mysql_conn.createStatement (). ExecuteQuery ("pilih count (1) dari cfg_code"); rs2.next (); System.out.println (rs2.getint (1)); rs2.close (); mysql_conn.close (); }}