Dua cara untuk membuat koneksi basis data menggunakan JDBC:
1. Gunakan DriverManager dalam kode untuk mendapatkan koneksi database. Metode ini tidak efisien dan kinerjanya, keandalan dan stabilitas secara bertahap menurun seiring dengan meningkatnya jumlah kunjungan pengguna.
2. Gunakan metode mengkonfigurasi sumber data untuk terhubung ke database. Inti dari metode ini adalah menambahkan kumpulan koneksi basis data berdasarkan metode di atas, yang sangat efisien.
Ada perbedaan berikut antara menghubungkan ke database menggunakan DriverManager dalam kode:
1) Kumpulan koneksi sumber data adalah untuk terhubung ke database dalam program. Dengan menanyakan server JNDI (Java penamaan dan antarmuka direktori), yaitu, memanggil metode pencarian () dari antarmuka konteks untuk mendapatkan objek DataSource, dan kemudian memanggil metode GetConnection () dari objek sumber data untuk membuat koneksi.
2) Untuk menggunakan kembali objek koneksi basis data, meningkatkan waktu respons terhadap permintaan dan kinerja server, teknologi pengumpulan koneksi diadopsi. Teknologi Pooling Koneksi membuat beberapa objek koneksi database di muka, dan kemudian menyimpan objek koneksi ke kumpulan koneksi. Ketika permintaan klien datang, objek koneksi dikeluarkan dari kumpulan untuk melayani pelanggan. Ketika permintaan selesai, program klien memanggil metode tutup () dan menempatkan objek koneksi kembali ke kumpulan.
3) Dengan cara menggunakan DriverManager untuk mendapatkan koneksi basis data dalam kode, objek koneksi yang diperoleh oleh program klien adalah koneksi fisik. Memanggil metode close () dari objek koneksi akan menutup koneksi. Menggunakan teknologi pengumpulan koneksi, objek koneksi yang diperoleh oleh program klien adalah pegangan untuk koneksi fisik di kumpulan koneksi. Memanggil metode tutup () dari objek koneksi, koneksi fisik tidak ditutup. Implementasi sumber data hanya menghapus koneksi antara objek koneksi dalam program klien dan objek koneksi di kumpulan.
Untuk kenyamanan pengujian, Anda dapat membuat tabel pengguna di database (lihat MySQL 5 sebagai contoh di sini):
Buat tabel `user` (` id` int (10) unsigned not null auto_increment, `username` varchar (50) default null,` kata sandi` varchar (50) nol default, `email` varchar (50) nol default, kunci utama (` id`),);
Impor paket JAR driver database ke direktori Lib Tomcat (di sini, mengambil MySQL5 sebagai contoh, paket JAR yang digunakan adalah: MySQL-Connector-Java-5.0.8-Bin.jar).
1. Gunakan DriverManager dalam kode untuk mendapatkan koneksi database. Metode ini tidak efisien dan kinerjanya, keandalan dan stabilitas secara bertahap menurun seiring dengan meningkatnya jumlah kunjungan pengguna.
Kode Java untuk koneksi database Oracle adalah sebagai berikut:
impor java.sql.connection; impor java.sql.driverManager; / ***Dapatkan koneksi database*/ kelas publik DBConnection {/ ** URL koneksi database Oracle*/ Private Final Static String db_url = "jdbc: oracle: tipis:@127.0.0.1: 1521: orcl"; / ** Oracle Database Connection Driver*/ Private Final Static String db_driver = "oracle.jdbc.driver.oracledRiver"; / ** Nama Pengguna Basis Data*/ Private Final Static String db_username = "root"; / ** Kata Sandi Basis Data*/ Private Final Static String db_password = "admin"; / *** Dapatkan koneksi basis data* @return*/ koneksi publik getConnection () {/ ** Deklarasikan objek koneksi koneksi*/ koneksi conn = null; Coba { / ** Gunakan metode class.forname () untuk secara otomatis membuat instance driver ini dan secara otomatis memanggil DriverManager untuk mendaftarkannya* / class.forname (db_driver); / ** Dapatkan koneksi database melalui metode driverManager getConnection ()*/ conn = driverManager.getConnection (db_url, db_username, db_password); } catch (exception ex) {ex.printstacktrace (); } return conn; } / *** Tutup koneksi database** @param connect* / public void closeConnection (koneksi koneksi) {coba {if (conn! = Null) { / ** Tentukan bahwa objek koneksi koneksi saat ini tidak ditutup, panggil metode penutupan* / if (! Conn.isclosed ()) {conn.close (); }}} catch (exception ex) {ex.printstacktrace (); }}}Kode JSP untuk koneksi database MySQL adalah sebagai berikut:
<%@page Impor = "java.sql.*, com.mysql.jdbc.driver"%> <%@page language = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <html> <dody> <%//mysc.mysq. Class.forname (driver.class.getName ()). NewInstance (); String url = "jdbc: mysql: // localhost: 3306/demo? Useunicode = true & characterencoding = utf8"; String user = "root"; String password = "123"; Koneksi conn = driverManager.getConnection (url, pengguna, kata sandi); Pernyataan stmt = conn.createStatement (); String sql = "pilih * dari pengguna"; Hasil rs = stmt.executeQuery (sql); while (rs.next ()) {out.print ("<br />" + "=====================" + "<br />"); out.print (rs.getlong ("id") + ""); out.print (rs.getString ("nama pengguna") + ""); out.print (rs.getString ("kata sandi") + ""); out.print (rs.getString ("email") + ""); } %> </body> </html>2. Gunakan metode mengkonfigurasi sumber data untuk terhubung ke database. Inti dari metode ini adalah menambahkan kumpulan koneksi basis data berdasarkan metode di atas, yang sangat efisien.
1) Kode JSP dari kumpulan koneksi sumber data database MySQL adalah sebagai berikut:
<%@page import="java.sql.*, javax.naming.*, javax.sql.DataSource"%> <%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <body> <%Context initCtx = new InitialContext(); DataSource ds = (DataSource) initctx.lookup ("java: comp/env/jdbc/demodb"); Koneksi conn = ds.getConnection (); Pernyataan stmt = conn.createStatement (); String sql = "pilih * dari pengguna"; Hasil rs = stmt.executeQuery (sql); while (rs.next ()) {out.print ("<br />" + "=====================" + "<br />"); out.print (rs.getlong ("id") + ""); out.print (rs.getString ("nama pengguna") + ""); out.print (rs.getString ("kata sandi") + ""); out.print (rs.getString ("email") + ""); } %> </body> </html>2) Tambahkan kode berikut ke server.xml di direktori conf tomcat:
<context> <name sumber daya = "jdbc/demodb" auth = "container" type = "javax.sql.dataSource" driverclassname = "com.mysql.jdbc.driver" url = "jdbc: mysql: // localhost: 3306/dempo" "" "MAXACKEOR" 12. " MaxWait = "10000" /> </context>
3) Mengkonfigurasi konten berikut di bawah node root web.xml di direktori proyek web:
<serayat-ref> <scription> Koneksi mysqldb </cripence> <res-ref-name> jdbc/demodb </ res-ref-name> <rese-type> javax.sql.datasource </RES-TYPE> <RES-AUTH> wadah </res-auth> </resource-ref>
Konfigurasi kumpulan koneksi dari sumber data telah selesai, tetapi untuk meningkatkan portabilitas proyek, yang terbaik adalah meletakkan konten langkah kedua di atas ke dalam konteks.xml dari direktori meta-INF proyek (file ini perlu dibuat dengan sendirinya):
<? Xml Version = "1.0" encoding = "UTF-8"?> <context> <name resource = "jdbc/demodb" auth = "container" type = "javax.sql.dataSource" driverclassname = "com.mysql.jdbc.driver" url = "jdbc: my: my/localspl. UserName = "root" kata sandi = "123" maxactive = "50" maxidle = "30" maxwait = "10000" /> </context>
3. Kelas Alat Operasi Database Saat mengonfigurasi kumpulan koneksi database dari sumber data
Kodenya adalah sebagai berikut:
paket db.utils; impor java.sql.connection; impor java.sql.preparedstatement; impor java.sql.Resultset; impor java.sql.resultsetMetadata; impor java.sql.sqlexception; impor java.sql.statement; impor java.text.dateFormat; impor java.util.arraylist; impor java.util.date; impor java.util.hashmap; impor java.util.list; impor java.util.map; impor javax.naming.initialcontext; impor javax.sql.datasource; // impor org.apache.log4j.logger; /*** Operasi basis data kelas tambahan*/kelas publik dbutils {// private static logger logger = logger.getLogger ("dbutils"); / ** * Pernyataan ini harus berupa SQL Insert, Update atau Hapus Pernyataan * @param SQL * @param Paramlist: Parameter, sesuai dengan placeholder dalam pernyataan SQL * @return * @throws Exception */ Public int Execute (String SQL, Daftar <Object> Paramlist) Lempar Pengecualian {IF (SQL == Null | //logger.info("parameter valid! "); } Koneksi conn = null; PSTMT Persiapan PSTMT = NULL; Hasil int = 0; coba {conn = getConnection (); PSTMT = dbutils.getPreparedStatement (Conn, SQL); setPreparedStateParam (PSTMT, paramlist); if (pstmt == null) {return -1; } result = pstmt.executeUpdate (); } catch (Exception e) {//logger.info (e.getMessage ()); Lempar pengecualian baru (e); } akhirnya {closeStAtement (pstmt); CloseConn (Conn); } hasil pengembalian; } / *** Konversi set hasil yang diperoleh dengan menanyakan database menjadi objek peta* @param sql: pernyataan kueri* @param paramlist: parameter* @return* / daftar publik <peta <string, objek >> getQueryList (string sql, daftar <object> paramlist) lemparan pengecualian {if (sql == (sql == sql. //logger.info("parameter valid! "); kembali nol; } Koneksi conn = null; PSTMT Persiapan PSTMT = NULL; Hasil rs = null; Daftar <peta <string, objek >> queryList = null; coba {conn = getConnection (); PSTMT = dbutils.getPreparedStatement (Conn, SQL); setPreparedStateParam (PSTMT, paramlist); if (pstmt == null) {return null; } rs = getResultSet (PSTMT); queryList = getQueryList (RS); } catch (runtimeException e) {//logger.info (e.getMessage ()); System.out.println ("Parameter valid!"); Lempar pengecualian baru (e); } akhirnya {ClosereSultSet (RS); terdekat dengan (PSTMT); CloseConn (Conn); } return queryList; } private void setPreparedStatementParam (preparedStatement pstmt, list <par Object> Paramlist) melempar Exception {if (pstmt == null || paramlist == null || paramlist.isempty ()) {return; } DateFormat df = dateFormat.getDateTimeInstance (); untuk (int i = 0; i <paramlist.size (); i ++) {if (paramlist.get (i) instanceof integer) {int paramValue = ((integer) paramlist.get (i)). intvalue (); pstmt.setint (i+1, paramValue); } else if (paramlist.get (i) instanceof float) {float paramValue = ((float) paramList.get (i)). floatValue (); PSTMT.SetFloat (i+1, paramValue); } else if (paramlist.get (i) instanceof double) {double paramValue = ((double) paramList.get (i)). doubleValue (); pstmt.setDouble (i+1, paramvalue); } else if (paramlist.get (i) instanceOf date) {pstmt.setstring (i+1, df.format ((date) paramlist.get (i))); } else if (paramlist.get (i) instanceof long) {long paramValue = ((long) paramList.get (i)). longValue (); pstmt.setlong (i+1, paramValue); } else if (paramlist.get (i) instanceof long) {long paramValue = ((long) paramList.get (i)). longValue (); pstmt.setlong (i+1, paramValue); } else if (paramlist.get (i) instanceof string) {pstmt.setstring (i+1, (string) paramList.get (i)); } } kembali; } / ** * Dapatkan koneksi database * @return * @throws Exception * / private connection getConnection () melempar Exception {InitialContext cxt = new InitialContext (); DataSource ds = (DataSource) cxt.lookup (jndiname); if (ds == null) {lempar pengecualian baru ("Sumber data tidak ditemukan!"); } return ds.getConnection (); } private static preparedStatement getPreparedStatement (Connection Conn, String SQL) melempar Exception {if (conn == null || sql == null || sql.trim (). equals ("")) {return null; } PreparedStatement PSTMT = Conn.PrepareStatement (sql.trim ()); mengembalikan PSTMT; } / ** * Dapatkan set hasil kueri basis data * @param pstmt * @return * @throws Exception * / private hasil getResultSet (disiapkan pstmt) melempar pengecualian {if (pstmt == null) {return null; } Hasil rs = pstmt.executeQuery (); mengembalikan Rs; } / ** * @param rs * @return * @throws Exception * / daftar pribadi <peta <string, objek >> getQueryList (hasil rs) melempar pengecualian {if (rs == null) {return null; } Resultetmetadata rsmetadata = rs.getMetadata (); int columncount = rsmetadata.getColumnCount (); Daftar <peta <string, objek >> datalist = new ArrayList <peta <string, object >> (); while (rs.next ()) {peta <string, object> datamap = new HashMap <String, Object> (); untuk (int i = 0; i <columncount; i ++) {datamap.put (rsmetadata.getColumnName (i+1), rs.getObject (i+1)); } datalist.add (datamap); } return distalist; } / *** Tutup koneksi database* @param conn* / private void closeConn (koneksi conn) {if (conn == null) {return; } coba {conn.close (); } catch (sqlexception e) {//logger.info (e.getMessage ()); }} / *** tutup* @param stmt* / private void terdekat (pernyataan stmt) {if (stmt == null) {return; } coba {stmt.close (); } catch (sqlexception e) {//logger.info (e.getMessage ()); }} / *** tutup* @param rs* / private void CloseResultSet (hasil rs) {if (rs == null) {return; } coba {rs.close (); } catch (sqlexception e) {//logger.info (e.getMessage ()); }} private string jndiname = "java:/comp/env/jdbc/demodb"; public void setjndiname (string jndiname) {this.jndiname = jndiname; }}Ringkasan: Gunakan metode mengkonfigurasi sumber data untuk terhubung ke database. Metode ini efisien dan stabil, sehingga disarankan untuk menggunakannya.
Untuk melihat lebih banyak sintaks Java, Anda dapat mengikuti: "Berpikir dalam manual Cina Java", "JDK 1.7 Manual Referensi Versi Bahasa Inggris Resmi", "JDK 1.6 API Java Manual Referensi Cina", "JDK 1.5 API Java Manual Referensi Cina". Saya juga berharap semua orang akan lebih mendukung wulin.com.