Dos formas de establecer la conexión de la base de datos utilizando JDBC:
1. Use Drivermanager en el código para obtener la conexión de la base de datos. Este método es ineficiente y su rendimiento, confiabilidad y estabilidad disminuyen gradualmente a medida que aumenta el número de visitas de usuarios.
2. Use el método de configuración de fuentes de datos para conectarse a la base de datos. La esencia de este método es agregar un grupo de conexión de base de datos basado en el método anterior, que es altamente eficiente.
Existe la siguiente diferencia entre conectarse a una base de datos utilizando Drivermanager en el código:
1) El grupo de conexión de fuente de datos debe conectarse a la base de datos en el programa. Al consultar un servidor JNDI (Naming Java e interfaz de directorio), es decir, llamar al método Lookup () de la interfaz de contexto para obtener el objeto DataSource y luego llamar al método getconnection () del objeto DataSource para establecer una conexión.
2) Para reutilizar los objetos de conexión de la base de datos, mejorar el tiempo de respuesta a las solicitudes y el rendimiento del servidor, se adopta la tecnología de agrupación de conexión. La tecnología de agrupación de conexión establece múltiples objetos de conexión de base de datos por adelantado, y luego guarda el objeto de conexión al grupo de conexión. Cuando llega la solicitud del cliente, se saca un objeto de conexión de la piscina para atender al cliente. Cuando se completa la solicitud, el programa del cliente llama al método Cerrar () y vuelve a colocar el objeto de conexión en el grupo.
3) En la forma de usar Drivermanager para obtener conexiones de base de datos en el código, el objeto de conexión obtenido por el programa del cliente es una conexión física. Llamar al método Cerrar () del objeto de conexión cerrará la conexión. Utilizando la tecnología de agrupación de conexión, el objeto de conexión obtenido por el programa del cliente es un mango de la conexión física en el grupo de conexión. Llamando al método Cerrar () del objeto de conexión, la conexión física no está cerrada. La implementación de la fuente de datos solo elimina la conexión entre el objeto de conexión en el programa del cliente y el objeto de conexión en el grupo.
Para probar la conveniencia, puede crear una tabla de usuario en la base de datos (consulte MySQL 5 como ejemplo aquí):
Crear tabla `user` (` id` int (10) unsigned no null auto_incement, `username` varchar (50) predeterminado nulo,` contraseña` varche (50) predeterminado nulo, `correo electrónico` varchar (50) predeterminado nulo, tecla primaria (` id`),);
Importe el paquete JAR del controlador de la base de datos en el directorio LIB de Tomcat (aquí, tomando MySQL5 como ejemplo, el paquete JAR utilizado es: MySQL-Connector-Java-5.0.8-Bin.jar).
1. Use Drivermanager en el código para obtener la conexión de la base de datos. Este método es ineficiente y su rendimiento, confiabilidad y estabilidad disminuyen gradualmente a medida que aumenta el número de visitas de usuarios.
El código Java para la conexión de la base de datos Oracle es el siguiente:
import java.sql.connection; import java.sql.drivermanager; / ***Obtener conexión de base de datos*/ public class dbconnection {/ ** Oracle Database Connection url*/ private final static string db_url = "jdbc: oracle: delgado:@127.0.0.1: 1521: orcl"; / ** Controlador de conexión de base de datos Oracle*/ String static final privado db_driver = "oracle.jdbc.driver.oracledriver"; / ** Nombre de usuario de la base de datos*/ cadena estática final privada db_username = "root"; / ** Contraseña de la base de datos*/ String estático final privado DB_Password = "Admin"; / *** Obtener conexión de base de datos* @return*/ public conexión getConnection () {/ ** Declarar el objeto de conexión de conexión*/ conexión conn = null; Pruebe { / ** use el método class.forname () para crear automáticamente una instancia de este controlador y llamar automáticamente a Drivermanager para registrarlo* / class.forname (db_driver); / ** Obtenga la conexión de la base de datos a través del método Drivermanager getConnection ()*/ conn = drivermanager.getConnection (db_url, db_username, db_password); } catch (Exception Ex) {Ex.PrintStackTrace (); } return Conn; } / *** Cierre la conexión de la base de datos** @param Connect* / public void CloseConnection (Connection Conn) {try {if (conn! = Null) { / ** Determine que el objeto de conexión de conexión actual no está cerrado, llame al método de cierre* / if (! Conn.isclosed ()) {conn.close (); }}} Catch (Exception Ex) {Ex.PrintStackTrace (); }}}El código JSP para la conexión de base de datos MySQL es el siguiente:
<%@page import = "java.sql.*, com.mysql.jdbc.driver"%> <%@page lenguaje = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <html> <body> <%//com.mysql.jdbc.driver Class.forname (controlador.class.getName ()). NewInStance (); String url = "jdbc: mysql: // localhost: 3306/demo? UseUnicode = true & caracterSencoding = utf8"; String user = "root"; Cadena contraseña = "123"; Conexión conn = drivermanager.getConnection (url, usuario, contraseña); Instrucción stmt = conn.createStatement (); Cadena sql = "seleccionar * de usuario"; ResultSet rs = stmt.executeQuery (sql); while (rs.next ()) {out.print ("<br />" + "=====================" + "<Br />"); out.print (rs.getLong ("id") + ""); out.print (rs.getString ("nombre de usuario") + ""); out.print (rs.getString ("contraseña") + ""); out.print (rs.getString ("correo electrónico") + ""); } %> </body> </html>2. Use el método de configuración de fuentes de datos para conectarse a la base de datos. La esencia de este método es agregar un grupo de conexión de base de datos basado en el método anterior, que es altamente eficiente.
1) El código JSP del grupo de conexión de fuente de datos de la base de datos MySQL es el siguiente:
<%@page import = "java.sql.*, javax.naming.*, javax.sql.dataSource"%> <%@page lenguaje = "java" contentType = "text/html; charset = utf-8" PageCoding = "Utf-8"%> <html> <fody> <%contextx = NewContext (); DataSource ds = (dataSource) initctx.lookup ("java: comp/env/jdbc/demodb"); Conexión conn = ds.getConnection (); Instrucción stmt = conn.createStatement (); Cadena sql = "seleccionar * de usuario"; ResultSet rs = stmt.executeQuery (sql); while (rs.next ()) {out.print ("<br />" + "=====================" + "<Br />"); out.print (rs.getLong ("id") + ""); out.print (rs.getString ("nombre de usuario") + ""); out.print (rs.getString ("contraseña") + ""); out.print (rs.getString ("correo electrónico") + ""); } %> </body> </html>2) Agregue el siguiente código a server.xml en el directorio de conf TomCat:
<textis> <resource name = "jdbc/demodb" auth = "Container" type = "javax.sql.dataSource" DriverClassName = "com.mysql.jdbc.driver" url = "jdbc: mysql: // localhost: 3306/demos" usame = "raíz" contraseña = "123" maxactive 50 "50" 50 "50" MATA "" MATA "MATA" MATA "MATA" MATA "MATA" MATA) maxwait = "10000" /> </textis>
3) Configure el siguiente contenido en el nodo raíz de Web.xml en el directorio del proyecto web:
<contrato-Ref> <Scuidtion> MySQLdb Connection </cription> <res-ref-name> jdbc/demodb </ res-ref-name> <res-type> javax.sql.dataSource </res-type> <ver-auth> contenedor </s-auth> </ recurso recurso-ref>
Se ha completado la configuración del grupo de conexión de la fuente de datos, pero para mejorar la portabilidad del proyecto, es mejor poner el contenido del segundo paso anterior en el context.xml del directorio metainf del proyecto (este archivo debe crearse solo):
<? xml versión = "1.0" encoding = "utf-8"?> <context> <resource name = "jdbc/demodb" auth = "Container" type = "javax.sql.dataSource" DriverClassName = "com.mysql.jdbc.driver" url = "jdbc: mysql: // local: 3306/dem" UserName = "root" contraseña = "123" maxactive = "50" maxidle = "30" maxWait = "10000" /> < /context>
3. Clase de herramienta de operación de base de datos Al configurar el grupo de conexión de la base de datos de la fuente de datos
El código es el siguiente:
paquete db.utils; import java.sql.connection; import java.sql.preparedStatement; import java.sql.resultset; import java.sql.ResultSetMetadata; import java.sql.sqlexception; import java.sql.statement; import java.text.dateformat; import java.util.arrayList; import java.util.date; import java.util.hashmap; import java.util.list; import java.util.map; import javax.naming.initialContext; import javax.sql.dataSource; // importar org.apache.log4j.logger; /*** Operación de base de datos Clase auxiliar*/clase public dButils {// private static logger = logger.getLogger ("dButils"); / ** * Esta declaración debe ser una instrucción SQL Insertar, Actualizar o Eliminar * @param sql * @param paramList: parameter, correspondiente al marcador de posición en la instrucción SQL * @return * @throws excepción */ public int Execute (String sql, list <sect> paramList) Lanza la excepción {si (sql == null || sql.trim (). Equals (iguales (paramList). //logger.info("parameter es válido! "); } Conexión conn = null; Preparado PSTMT = NULL; int resultado = 0; intente {conn = getConnection (); pstmt = dButils.getPreparedStatement (Conn, SQL); setPreparedStatementParam (PSTMT, ParamList); if (pstmt == null) {return -1; } resultado = pstmt.executeUpdate (); } catch (excepción e) {//logger.info (e.getMessage ()); arrojar una nueva excepción (e); } Finalmente {CloseStatement (PSTMT); Closeconn (Conn); } resultado de retorno; } / *** Convierta el conjunto de resultados obtenido consultando la base de datos en un objeto de mapa* @param sql: instrucción de consulta* @param paramList: parameter* @return* / public list <map <string, object >> getQueryList (string sql, list <pect> paramList) Exception {if (sql == null || sql.trim (). (). //logger.info("parameter es válido! "); regresar nulo; } Conexión conn = null; Preparado PSTMT = NULL; ResultSet rs = null; List <map <string, object >> queryList = null; intente {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 ("¡El parámetro es válido!"); arrojar una nueva excepción (e); } Finalmente {CloseResultSet (rs); cercanía (PSTMT); Closeconn (Conn); } return QueryList; } private void setPreparedStatEmentParam (preparado PSTMT, List <ject> paramList) lanza la excepción {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) {int paramValue = ((integer) paramList.get (i)). intValue (); pstmt.setInt (i+1, paramValue); } else if (paramList.get (i) instanciaf float) {float paramValue = ((float) paramList.get (i)). floatValue (); pstmt.setfloat (i+1, paramValue); } else if (paramList.get (i) instanciaf doble) {double paramValue = ((double) paramList.get (i)). DoubleValue (); pstmt.setDouble (i+1, paramValue); } else if (paramList.get (i) instanciaf fecha) {pstmt.setstring (i+1, df.format ((date) paramList.get (i))); } else if (paramList.get (i) instancia de largo) {long paramValue = ((long) paramList.get (i)). longValue (); pstmt.setLong (i+1, paramValue); } else if (paramList.get (i) instancia de largo) {long paramValue = ((long) paramList.get (i)). longValue (); pstmt.setLong (i+1, paramValue); } else if (paramList.get (i) instanciaf string) {pstmt.setString (i+1, (string) paramList.get (i)); } } devolver; } / ** * Obtener conexión de base de datos * @return * @throws excepción * / private conexión getConnection () lanza la excepción {inicialContext cxt = new InitialContext (); DataSource ds = (dataSource) cxt.lookup (jndiname); if (ds == null) {tirar nueva excepción ("¡Fuente de datos no encontrada!"); } return ds.getConnection (); } Private static prepareStatement getPreparedStatement (Connection Conn, String SQL) lanza la excepción {if (conn == null || sql == null || sql.trim (). Equals ("")) {return null; } Preparado PSTMT = Conn.PrepareStatement (sql.trim ()); devolver pstmt; } / ** * Obtener el conjunto de resultados de la consulta de la base de datos * @param pstmt * @return * @throws excepción * / private resultset getResultSet (preparado PSTMT) arroja excepción {if (pstmt == null) {return null; } ResultSet rs = pstmt.executeQuery (); devolver Rs; } / ** * @param rs * @return * @throws excepción * / private list <map <string, object >> getQueryList (resultset rs) lanza la excepción {if (rs == null) {return null; } ResultSetMetadata rsmetadata = rs.getMetadata (); int columnCount = rsmetadata.getColumnCount (); Lista <map <string, object >> dataList = new ArrayList <map <string, object >> (); while (rs.next ()) {map <string, object> datAMAP = new HashMap <String, Object> (); for (int i = 0; i <columnCount; i ++) {datAMAP.put (rsmetadata.getColumnName (i+1), rs.getObject (i+1)); } dataList.Add (dataMap); } return dataList; } / *** Cierre la conexión de la base de datos* @param conn* / private void closeConn (conexión conn) {if (conn == null) {return; } try {conn.close (); } Catch (Sqlexception e) {//logger.info (e.getMessage ()); }} / *** Cerrar* @param stmt* / private void CloseStatement (Declaración stmt) {if (stmt == null) {return; } try {stmt.close (); } Catch (Sqlexception e) {//logger.info (e.getMessage ()); }} / *** Cerrar* @param rs* / private void closeSultSet (resultset rs) {if (rs == null) {return; } try {rs.close (); } Catch (Sqlexception e) {//logger.info (e.getMessage ()); }} cadena privada jndiname = "java:/comp/env/jdbc/demodb"; public void setjndiname (string jndiname) {this.jndiname = jndiname; }}Resumen: use el método de configuración de fuentes de datos para conectarse a la base de datos. Este método es eficiente y estable, por lo que se recomienda usarlo.
Para ver más sintaxis de Java, puede seguir: "Pensar en el manual de chino Java", "JDK 1.7 Manual de referencia Versión oficial de inglés", "JDK 1.6 Manual de referencia chino API Java", "JDK 1.5 API Java Manual de referencia chino". También espero que todos apoyen más a Wulin.com.