Deux façons d'établir une connexion à la base de données à l'aide de JDBC:
1. Utilisez DriverManager dans le code pour obtenir la connexion de la base de données. Cette méthode est inefficace et ses performances, sa fiabilité et sa stabilité diminuent progressivement à mesure que le nombre de visites d'utilisateurs augmente.
2. Utilisez la méthode de configuration des sources de données pour se connecter à la base de données. L'essence de cette méthode consiste à ajouter un pool de connexions de base de données basé sur la méthode ci-dessus, ce qui est très efficace.
Il y a la différence suivante entre la connexion à une base de données à l'aide de DriverManager dans le code:
1) Le pool de connexions de source de données doit se connecter à la base de données du programme. En interrogeant un serveur JNDI (Java Naming and Directory Interface), c'est-à-dire en appelant la méthode Lookup () de l'interface de contexte pour obtenir l'objet DataSource, puis en appelant la méthode getConnection () de l'objet DataSource pour établir une connexion.
2) Afin de réutiliser les objets de connexion de la base de données, améliorez le temps de réponse aux demandes et les performances du serveur, la technologie de mise en commun des connexions est adoptée. La technologie de mise en commun de connexion établit à l'avance plusieurs objets de connexion de la base de données, puis enregistre l'objet de connexion au pool de connexion. Lorsque la demande du client arrive, un objet de connexion est retiré du pool pour servir le client. Une fois la demande terminée, le programme client appelle la méthode Close () et remet l'objet de connexion dans le pool.
3) Pour utiliser DriverManager pour obtenir des connexions de base de données dans le code, l'objet de connexion obtenu par le programme client est une connexion physique. L'appel de la méthode close () de l'objet de connexion fermera la connexion. À l'aide de la technologie de pool de connexion, l'objet de connexion obtenu par le programme client est une poignée de la connexion physique dans le pool de connexion. Appelant la méthode close () de l'objet de connexion, la connexion physique n'est pas fermée. L'implémentation de la source de données supprime uniquement la connexion entre l'objet de connexion dans le programme client et l'objet de connexion dans le pool.
Pour tester la commodité, vous pouvez créer une table d'utilisateurs dans la base de données (voir MySQL 5 comme exemple ici):
Créer la table `User` (` id` int (10) non signé non null auto_increment, `username` varchar (50) par défaut null,` mot de passe` varchar (50) par défaut null, `e-mail` varchar (50) null, clé primaire (` id`),);
Importez le package JAR du conducteur de la base de données dans le répertoire Lib de Tomcat (ici, en prenant MySQL5 comme exemple, le package JAR utilisé est: MySQL-Connector-Java-5.0.8-Bin.jar).
1. Utilisez DriverManager dans le code pour obtenir la connexion de la base de données. Cette méthode est inefficace et ses performances, sa fiabilité et sa stabilité diminuent progressivement à mesure que le nombre de visites d'utilisateurs augmente.
Le code Java pour la connexion de la base de données Oracle est le suivant:
import java.sql.connection; Importer Java.Sql.DiverManager; / ** * Obtenez la connexion de la base de données * / classe publique dbconnection {/ ** URL de connexion de base de données Oracle * / chaîne statique finale privée db_url = "jdbc: oracle: mince: @ 127.0.0.1: 1521: orcl"; / ** Oracle Database Connection Driver * / private final static String db_driver = "oracle.jdbc.driver.oracledriver"; / ** Nom d'utilisateur de la base de données * / chaîne statique finale privée db_username = "root"; / ** Mot de passe de la base de données * / chaîne statique finale privée db_password = "admin"; / ** * Obtenez la connexion de la base de données * @return * / connexion publique getConnection () {/ ** Déclare l'objet de connexion de connexion * / connexion conn = null; essayez {/ ** Utilisez la méthode class.forname () pour créer automatiquement une instance de ce pilote et appelez automatiquement driverManager pour l'enregistrer * / class.forname (db_driver); / ** Obtenez la connexion de la base de données via la méthode driverManager getConnection () * / conn = driverManager.getConnection (db_url, db_username, db_password); } catch (exception ex) {ex.printStackTrace (); } return conn; } / ** * Fermez la connexion de la base de données * * @param connect * / public void CloseConnection (connexion Conn) {try {if (Conn! = Null) {/ ** Déterminez que l'objet de connexion actuel n'est pas fermé, appelez la méthode de clôture * / if (! Conn.isclosed ()) {Conn.close (); }}} catch (exception ex) {ex.printStackTrace (); }}}Le code JSP pour la connexion de la base de données MySQL est le suivant:
<% @ page import = "java.sql. *, com.mysql.jdbc.driver"%> <% @ page linguisse = "java" contentType = "text / html; charset = utf-8" pageencoding = "utf-8"%> <html> <body> <% //com.mysql.jdbc.Driver Class.forname (driver.class.getName ()). NewInstance (); String url = "jdbc: mysql: // localhost: 3306 / démo? Useunicode = true & caractèrescoding = utf8"; String user = "root"; String mot de passe = "123"; Connection Conn = driverManager.getConnection (URL, utilisateur, mot de passe); Instruction stmt = conn.createStatement (); String SQL = "SELECT * FROM User"; ResultSet rs = stmt.ExecuteQuery (SQL); while (Rs.Next ()) {out.print ("<br />" + "===================" + "<br />"); Out.print (Rs.GetLong ("ID") + ""); Out.print (Rs.getString ("nom d'utilisateur") + ""); Out.print (Rs.GetString ("Mot de passe") + ""); Out.print (Rs.GetString ("Email") + ""); }%> </ body> </html>2. Utilisez la méthode de configuration des sources de données pour se connecter à la base de données. L'essence de cette méthode consiste à ajouter un pool de connexions de base de données basé sur la méthode ci-dessus, ce qui est très efficace.
1) Le code JSP du pool de connexion de la source de données de la base de données MySQL est le suivant:
<% @ page import = "java.sql. *, javax.naming. *, javax.sql.datasource"%> <% @ page linguisse = "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"); Connexion conn = ds.getConnection (); Instruction stmt = conn.createStatement (); String SQL = "SELECT * FROM User"; ResultSet rs = stmt.ExecuteQuery (SQL); while (Rs.Next ()) {out.print ("<br />" + "===================" + "<br />"); Out.print (Rs.GetLong ("ID") + ""); Out.print (Rs.getString ("nom d'utilisateur") + ""); Out.print (Rs.GetString ("Mot de passe") + ""); Out.print (Rs.GetString ("Email") + ""); }%> </ body> </html>2) Ajoutez le code suivant à server.xml dans le répertoire confr de Tomcat:
<Context> <ressource name = "jdbc / demodb" auth = "contener" type = "javax.sql.datasource" driverclassname = "com.mysql.jdbc.driver" url = "jdbc: mysql: // localhost: 3306 / démo" username = "root" mot de passe = "123" max maxwait = "10000" /> </ context>
3) Configurez le contenu suivant sous le nœud racine de web.xml dans le répertoire du projet Web:
<Resource-ref> <escription> MySQLDB Connection </ Description> <Res-Ref-Name> JDBC / Demodb </sr-Ref-name> <Res-Type> Javax.sql.Datasource </su-Type> <Res-Auth> Container </ Res-Auth> </ Resource-Ref>
La configuration du pool de connexion de la source de données est terminée, mais afin d'améliorer la portabilité du projet, il est préférable de placer le contenu de la deuxième étape ci-dessus dans le contexte.xml du répertoire méta-infr du projet (ce fichier doit être créé par lui-même):
<? xml version = "1.0" Encoding = "UTF-8"?> <context> <Resource Name = "JDBC / Demodb" Auth = "Container" type = "Javax.Sql.Datasource" DriverClassName = "com.mysql.jdbc. username = "root" mot de passe = "123" maxactive = "50" maxidle = "30" maxwait = "10000" /> </ context>
3. Classe d'outils de fonctionnement de la base de données Lors de la configuration du pool de connexion de la base de données de la source de données
Le code est le suivant:
package db.utils; import java.sql.connection; Importer java.sql.PreparedStatement; import java.sql.resultSet; Importer java.sql.resultSetMetadata; import java.sql.sqlexception; import java.sql.statement; import java.text.dateformat; import java.util.arraylist; Importer java.util.date; import java.util.hashmap; Importer java.util.list; importation java.util.map; import javax.naming.InitialContext; import javax.sql.datasource; // import org.apache.log4j.logger; / ** * Fonctionnement de la base de données Classe auxiliaire * / classe publique dButils {// Logger statique privé = logger.getLogger ("dbutils"); / ** * Cette instruction doit être une instruction SQL INSERT, UPDATE OU DELELET * @Param SQL * @param paramlist: Paramètre, correspondant à l'espace réservé dans l'instruction SQL * @return * @throws exception * / public int exécute (String Sql) //logger.info("Parameter est valide! "); } Connexion conn = null; Préparé Pstmt = null; INT Result = 0; essayez {conn = getConnection (); pstmt = dButils.getPreparedStatement (Conn, SQL); SetPreparedStatementParam (PSTMT, paramlist); if (pstmt == null) {return -1; } result = pstmt.executeupdate (); } catch (exception e) {//logger.info (e.getMessage ()); lancer une nouvelle exception (e); } enfin {ClosEstatement (pstmt); CloseConn (Conn); } Retour Résultat; } / ** * Convertir l'ensemble de résultats obtenu en interrogeant la base de données en un objet MAP * @param sql: instruction de requête * @param paramlist: paramètre * @return * / public list <map <string, objet >> getQueryList (String Sql, list <objet> paramlist) lance l'exception {if (sql == null || sql.trim (). //logger.info("Parameter est valide! "); retourner null; } Connexion conn = null; Préparé Pstmt = null; ResultSet rs = null; List <map <string, objet >> queryList = null; essayez {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 ("Le paramètre est valide!"); lancer une nouvelle exception (e); } Enfin {CloserResultSet (RS); Closestatement (PSTMT); CloseConn (Conn); } return QueryList; } private void SetPreparedStatementParam (préparéStatement PSTMT, liste <objet> paramlist) lève une exception {if (pstmt == null || paramlist == null || paramlist.isempty ()) {return; } DateFormat df = dateFormat.getDateTimeInstance (); for (int i = 0; i <paramlist.size (); i ++) {if (paramlist.get (i) instanceof Integer) {intamvalue = ((Integer) paramlist.get (i)). intValue (); pstmt.sentInt (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)); } } retour; } / ** * Obtenez la connexion de la base de données * @return * @throws exception * / connexion privée getConnection () lève l'exception {initialContext cxt = new initialContext (); DataSource ds = (dataSource) cxt.lookup (jndiname); if (ds == null) {lancer une nouvelle exception ("Source de données introuvable!"); } return ds.getConnection (); } Private Static préparestatement getPreparedStatement (connexion conn, string sql) lève une exception {if (conn == null || sql == null || sql.trim (). equals ("")) {return null; } Préparé Pstmt = Conn.PrepareStatement (sql.trim ()); retour pstmt; } / ** * Obtenez le jeu de résultats de la requête de la base de données * @param pstmt * @return * @throws exception * / private resultTset getResultSet (préparestatement pstmt) lève une exception {if (pstmt == null) {return null; } ResultSet rs = pstmt.ExecuteQuery (); retour Rs; } / ** * @param rs * @return * @throws exception * / Liste privée <map <string, objet >> getQueryList (resultSet rs) exception {if (rs == null) {return null; } ResultSetMetAdata rsmetAdata = Rs.GetMetAdata (); int colnCount = rsmetadata.getColumnCount (); List <map <string, objet >> datalist = new ArrayList <map <string, objet >> (); while (Rs.Next ()) {map <string, object> dataMap = new HashMap <String, object> (); for (int i = 0; i <colnumnCount; i ++) {dataMap.put (rsmetadata.getColumnname (i + 1), Rs.GetObject (i + 1)); } datalist.add (dataMap); } return datalist; } / ** * Fermez la connexion de la base de données * @param Conn * / private void closeConn (connexion Conn) {if (conn == null) {return; } essayez {conn.close (); } catch (sqlexception e) {//logger.info (e.getMessage ()); }} / ** * Close * @param stmt * / private void ClosEstatement (instruction stmt) {if (stmt == null) {return; } essayez {stmt.close (); } catch (sqlexception e) {//logger.info (e.getMessage ()); }} / ** * Close * @param rs * / private void closeReSultSet (resultSet rs) {if (rs == null) {return; } essayez {Rs.close (); } catch (sqlexception e) {//logger.info (e.getMessage ()); }} chaîne privée jndiname = "java: / comp / env / jdbc / demodb"; public void setjndiname (string jndiname) {this.jndiname = jndiname; }}Résumé: Utilisez la méthode de configuration des sources de données pour se connecter à la base de données. Cette méthode est efficace et stable, il est donc recommandé de l'utiliser.
Pour voir plus de syntaxe Java, vous pouvez suivre: "Penser dans Java Chinese Manual", "JDK 1.7 Reference Manual English Version", "JDK 1.6 API Java Chinese Reference Manual", "JDK 1.5 API Java Chinese Reference Manual". J'espère également que tout le monde soutiendra davantage Wulin.com.