Zwei Möglichkeiten, die Datenbankverbindung mit JDBC herzustellen:
1. Verwenden Sie DriverManager im Code, um die Datenbankverbindung zu erhalten. Diese Methode ist ineffizient und ihre Leistung, Zuverlässigkeit und Stabilität nehmen allmählich ab, wenn die Anzahl der Benutzerbesuche zunimmt.
2. Verwenden Sie die Methode zum Konfigurieren von Datenquellen, um eine Verbindung zur Datenbank herzustellen. Das Wesentliche dieser Methode besteht darin, einen Datenbankverbindungs -Pool basierend auf der obigen Methode hinzuzufügen, die hocheffizient ist.
Es gibt den folgenden Unterschied zwischen der Verbindung zu einer Datenbank mit TriverManager im Code:
1) Der Datenquellenverbindungspool soll eine Verbindung zur Datenbank im Programm herstellen. Durch Abfragen eines JNDI -Servers (Java -Benennungs- und Verzeichnisschnittstelle), dh, rufen Sie die SOOKUP () der Kontextschnittstelle auf, um das DataSource -Objekt zu erhalten und dann die Methode GetConnection () des DataSource -Objekts aufzurufen, um eine Verbindung herzustellen.
2) Um Datenbankverbindungsobjekte wiederzuverwenden, die Antwortzeit für Anforderungen und die Leistung des Servers zu verbessern, wird die Verbindungs -Pooling -Technologie übernommen. Die Verbindungspooling -Technologie legt im Voraus mehrere Datenbankverbindungsobjekte fest und speichert das Verbindungsobjekt dann im Verbindungspool. Wenn die Kundenanfrage eingeht, wird ein Verbindungsobjekt aus dem Pool herausgenommen, um dem Kunden zu bedienen. Wenn die Anforderung abgeschlossen ist, ruft das Client -Programm die Methode close () auf und stellt das Verbindungsobjekt wieder in den Pool ein.
3) In Bezug auf die Verwendung von DriverManager, um Datenbankverbindungen im Code zu erhalten, ist das vom Client -Programm erhaltene Verbindungsobjekt eine physische Verbindung. Wenn Sie die Methode Close () des Verbindungsobjekts aufrufen, schließt die Verbindung. Mit der Verbindungs -Pooling -Technologie ist das vom Client -Programm erhaltene Verbindungsobjekt ein Handle zur physischen Verbindung im Verbindungspool. Wenn Sie die Methode Close () des Verbindungsobjekts aufrufen, ist die physische Verbindung nicht geschlossen. Die Implementierung der Datenquelle löscht nur die Verbindung zwischen dem Verbindungsobjekt im Client -Programm und dem Verbindungsobjekt im Pool.
Zum Testen der Bequemlichkeit können Sie eine Benutzertabelle in der Datenbank erstellen (siehe hier als Beispiel hier):
Tabelle `user`` (` id` int (10) Unsigned Not Null Auto_increment, `username` varchar (50) Standardnull,` password` varchar (50) Standardnull, `E -Mail` varchar (50) Standardnull, Primärschlüssel (` id`);
Importieren Sie das JAR-Paket des Treibers der Datenbank in das LIB-Verzeichnis von Tomcat (hier als Beispiel das verwendete JAR-Paket ist: Mysql-Connector-Java-5.0.8-min.jar).
1. Verwenden Sie DriverManager im Code, um die Datenbankverbindung zu erhalten. Diese Methode ist ineffizient und ihre Leistung, Zuverlässigkeit und Stabilität nehmen allmählich ab, wenn die Anzahl der Benutzerbesuche zunimmt.
Der Java -Code für die Oracle -Datenbankverbindung lautet wie folgt:
Import Java.sql.Connection; importieren java.sql.drivermanager; / ***Datenbankverbindung abrufen*/ öffentliche Klasse dbConnection {/ ** Oracle -Datenbankverbindung URL*/ private endgültige statische String db_url = "jdbc: oracle: dünn:@127.0.0.1: 1521: orcl"; / ** Oracle -Datenbankverbindungs -Treiber*/ private endgültige statische String db_driver = "oracle.jdbc.driver.oracledriver"; / ** Datenbank Benutzername*/ private endgültige statische String db_username = "root"; / ** Datenbankkennwort*/ private endgültige statische Zeichenfolge db_password = "admin"; / *** Datenbankverbindung abrufen* @return*/ public Connection getConnection () {/ ** das Verbindungsverbindungsobjekt*/ Verbindung conn = null; Versuchen Sie { / ** Verwenden Sie die Methode class.forname (), um automatisch eine Instanz dieses Treibers zu erstellen und triverManager automatisch aufzurufen, um sie zu registrieren* / class.forname (db_driver); / ** Datenbankverbindung über die DriverManager getConnection () -Methode*/ conn = driverManager.getConnection (db_url, db_username, db_password); } catch (Ausnahme ex) {ex.printstacktrace (); } return conn; } / *** Schließen Sie die Datenbankverbindung** @param connect* / public void Closeconnection (Verbindung conn) {try {if (conn! = Null) { / ** Bestimmen Sie, dass das aktuelle Verbindungsverbindungsobjekt nicht geschlossen ist, rufen Sie die Schließmethode auf* / if (! Conn.iscleted ()) {conn.Close (); }}} catch (Ausnahme ex) {ex.printstacktrace (); }}}Der JSP -Code für die MySQL -Datenbankverbindung lautet wie folgt:
<%@page import = "java.sql.*, com.mysql.jdbc.driver Class.forname (driver.class.getName ()). NewInstance (); String url = "jdbc: mysql: // localhost: 3306/Demo? UseUnicode = true & charakterencodierung = utf8"; String user = "root"; String password = "123"; Verbindung conn = driverManager.getConnection (URL, Benutzer, Passwort); Anweisung STMT = Conn.CreateStatement (); String SQL = "Select * vom Benutzer"; ResultSet rs = stmt.executeQuery (SQL); while (rs.Next ()) {out.print ("<br />" + "====================" + "<br />"); out.print (rs.getLong ("id") + ""); out.print (rs.getString ("Benutzername") + ""); out.print (rs.getString ("Passwort") + ""); out.print (rs.getString ("E -Mail") + ""); } %> </body> </html>2. Verwenden Sie die Methode zum Konfigurieren von Datenquellen, um eine Verbindung zur Datenbank herzustellen. Das Wesentliche dieser Methode besteht darin, einen Datenbankverbindungs -Pool basierend auf der obigen Methode hinzuzufügen, die hocheffizient ist.
1) Der JSP -Code des MySQL -Datenbankdatenquellenverbindungspools lautet wie folgt:
<%@page import = "java.sql.*, javax.naming. DataSource DS = (DataSource) initctx.lookup ("Java: comp/env/jdbc/Demodb"); Verbindung conn = ds.getConnection (); Anweisung STMT = Conn.CreateStatement (); String SQL = "Select * vom Benutzer"; ResultSet rs = stmt.executeQuery (SQL); while (rs.Next ()) {out.print ("<br />" + "====================" + "<br />"); out.print (rs.getLong ("id") + ""); out.print (rs.getString ("Benutzername") + ""); out.print (rs.getString ("Passwort") + ""); out.print (rs.getString ("E -Mail") + ""); } %> </body> </html>2) Fügen Sie Server.xml den folgenden Code im Conf -Verzeichnis von Tomcat hinzu:
<Context> <ressourcenname = "jdbc/demodb" auth = "container" type = "javax.sql.dataSource" DriverClassName = "com.mysql.jdbc.driver" url = "jdbc: mysql: // localhost: 3306/Demo" username = "username maxidle = "30" maxwait = "10000" /> < /context>
3) Konfigurieren Sie den folgenden Inhalt unter dem Root -Knoten von web.xml im Webprojektverzeichnis:
<ressourcen-ref> <beschreibung> MySQLDB-Verbindung </Beschreibung> <res-ref-name> javax.sql.datasource </res-type> <res-autherin </res-auth> </ressourcen-ref> </ressource-type> <res-type> javax.sql.datasource </ressourcen-resf>
Die Konfiguration der Verbindungspool der Datenquelle wurde abgeschlossen. Um die Portabilität des Projekts zu verbessern, ist es am besten, den Inhalt des zweiten Schritts oben in den Kontext zu setzen.
<? userername = "root" password = "123" maxactive = "50" maxidle = "30" maxwait = "10000" /> < /context>
A. Datenbankbetriebs -Toolklasse beim Konfigurieren des Datenbankverbindungsbeckens der Datenquelle
Der Code ist wie folgt:
Paket db.utils; Import Java.sql.Connection; importieren java.sql.preeParedStatement; importieren java.sql.resultset; importieren java.sql.resultsetmetadata; importieren java.sql.sqlexception; importieren java.sql.statement; Java.Text.DateFormat importieren; Import Java.util.ArrayList; import Java.util.date; import Java.util.hashMap; importieren java.util.list; import Java.util.map; import javax.naming.initialcontext; importieren javax.sql.datasource; // org.apache.log4j.logger; /*** Datenbankoperation Hilfsklasse*/öffentliche Klasse DButils {// private statische Logger logger = logger.getLogger ("dButils"); / ** * Diese Anweisung muss eine SQL -Einfügung, Aktualisierung oder Löschung sein. //logger.info("Parameter ist gültig! "); } Verbindung conn = null; PrepedStatement pstmt = null; int result = 0; try {conn = getConnection (); pstmt = dbutils.getPreparedStatement (conn, SQL); setPreparedStatementParam (PSTMT, ParamList); if (pstmt == null) {return -1; } result = pstmt.executeUpdate (); } catch (Ausnahme e) {//logger.info (e.getMessage ()); Neue Ausnahme (e) werfen; } endlich {Closestatement (pstmt); Closeconn (conn); } Rückgabeergebnis; } / *** Konvertieren Sie das Ergebnissatz, das durch Abfragen der Datenbank in ein MAP -Objekt* @param SQL: Query -Anweisung* @param ParamList: Parameter* @return* / publiclist <map <String, Objekt >> getQueryList (String SQL, List <Foject> paramlist) erhalten wird. //logger.info("Parameter ist gültig! "); null zurückkehren; } Verbindung conn = null; PrepedStatement pstmt = null; ResultSet rs = null; Liste <map <String, Objekt >> queryList = null; try {conn = getConnection (); pstmt = dbutils.getPreparedStatement (conn, SQL); setPreparedStatementParam (PSTMT, ParamList); if (pstmt == null) {return null; } rs = getResultSet (pstmt); QueryList = GetQueryList (RS); } catch (runTimeException e) {//logger.info (e.getMessage ()); System.out.println ("Parameter ist gültig!"); Neue Ausnahme (e) werfen; } endlich {cleanSultSet (rs); Naht (PSTMT); Closeconn (conn); } return queryList; } private void setPreparedStatementParam (PrepedStatement pstMt, List <Obum> paramlist) löst die Ausnahme aus {if (pstmt == null || paramList == null || paramList.isempy ()) {return; } DateFormat df = dateFormat.getDatetimeInstance (); für (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) Instanzdatum) {pstmt.setString (i+1, df.format ((Datum) paramList.get (i))); } else if (paramList.get (i) Instanz von lang) {long paramvalue = ((long) paramList.get (i)). longvalue (); pstmt.setlong (i+1, paramvalue); } else if (paramList.get (i) Instanz von lang) {long paramvalue = ((long) paramList.get (i)). longvalue (); pstmt.setlong (i+1, paramvalue); } else if (paramList.get (i) Instanzstring) {pstmt.setString (i+1, (string) paramList.get (i)); } } zurückkehren; } / ** * Datenbankverbindung abrufen * @return * @throws Exception * / private Verbindung getConnection () löst eine Ausnahme aus {initialContext cxt = new initialContext (); DataSource DS = (DataSource) cxt.lookup (jndiname); if (ds == null) {neue Ausnahme werfen ("Datenquelle nicht gefunden!"); } return ds.getConnection (); } private static errepedStatement getPreparedStatement (Verbindung conn, String SQL) löst Ausnahme aus {if (conn == null || sql == null || sql.trim (). Equals ("")) {return null; } PreparedStatement pstmt = conn.preparestatement (sql.trim ()); return pstmt; } / ** * Datenbank -Abfrageergebnis erhalten * @param pstmt * @return * @throws Exception * / private resultSet getResultSet (prepedStatement pstmt) löst eine Ausnahme aus {if (pstmt == null) {return null; } ResultSet rs = pstmt.executeQuery (); RS RS zurückgeben; } / ** * @param rs * @return * @throws Exception * / private Liste <map <String, Objekt >> getQueryList (Ergebnisset RS) löst die Ausnahme aus {if (rs == null) {return null; } ResultSetmetadata rsmetadata = rs.getmetadata (); int columncount = rsmetadata.getColumnCount (); Liste <map <string, objekt >> datalist = new ArrayList <map <String, Objekt >> (); while (rs.Next ()) {map <string, Object> datamap = new HashMap <String, Object> (); für (int i = 0; i <columnCount; i ++) {datamap.put (rsmetadata.getColumnName (i+1), rs.getObject (i+1)); } datalist.add (Datamap); } return Datalist; } / *** Schließen Sie die Datenbankverbindung* @param conn* / private void Closeconn (Verbindung conn) {if (conn == null) {return; } try {conn.close (); } catch (sqlexception e) {//logger.info (e.getMessage ()); }} / *** schließen* @param stmt* / private void Cessestatement (Anweisung stmt) {if (stmt == null) {return; } try {stmt.close (); } catch (sqlexception e) {//logger.info (e.getMessage ()); }} / *** schließen* @param rs* / private void näher? } try {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; }}Zusammenfassung: Verwenden Sie die Methode zum Konfigurieren von Datenquellen, um eine Verbindung zur Datenbank herzustellen. Diese Methode ist effizient und stabil, daher wird empfohlen, sie zu verwenden.
Um mehr Java -Syntax anzuzeigen, können Sie folgen: "Denken in Java Chinese Manual", "JDK 1.7 Referenzhandbuch Offizieller Englischversion", "JDK 1.6 API Java Chinese Referenzhandbuch", "JDK 1.5 API Java Chinese Referenzhandbuch". Ich hoffe auch, dass jeder wulin.com mehr unterstützt.