Conexión a bases de datos J2ee jdbc eclipse

7

Por admin | Para la categoría de java j2ee | noticia del 09-09-2009

En este tutorial vamos a ver como configurar y crear un proyecto web en el editor eclipse para establecer una conexión con una base de datos.

El ejemplo está realizado en linux ubuntu pero es igualmente utilizable para windows ya se comentó en anteriores post sobre el tema de instalaciones tanto del servidor tomcat como del eclipse.

Como servidor de bases de datos utilizaremos mysql concretamente la versión
mysql Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2

Para crear la base de datos utilizaremos Mysql Query Browser, si teneís phpMyadmin instalado y os gusta más no hace falta utilizar esta herramienta o bien crearla desde el propio mysql.

MySQL Query Browser

Esta aplicación hace lo mismo que haríamos con un terminal de mysql pero de una manera gráfica, nos pide el nombre del superusuario y la clave por terminal sería (mysql -u root -p y darle la clave del usuario)

Una vez dentro vemos las bases de datos existentes en nuestro servidor mysql ( que viene por defecto con dos mysql e information_schema)

Crearemos una base de datos muy sencilla llamada “libros_jdbc”, con el cursor por ejemplo en la tabla “infomation_schema”, vamos a botón derecho y create chema y le damos el nombre anterior o el que se quiera (pero claro guardando entonces la correspondencia con lo siguiente )

bases

Le damos el nombre a la base de datos
Create Schema

Esto mismo se puede hacer desde el terminal tanto de linux, como de símbolo de sistema de windows la instrucción sería la siguiente:

“create database libros_jdbc;” y para para poder utilizarla (hacer tablas dentro de la base de datos ) ponemos
“use libros_jdbc;” con esto le estamos indicando a mysql que vamos a utilizar dicha base de datos.

Creamos una tabla para esta base de datos muy sencilla

Le decimos que sea del tipo innodb aunque no es necesario este paso para este ejemplo, las tablas de este formato permiten trabajar con claves externas para mysql5.

opciones

para crear la tabla vamos a “Apply changes”, si no hemos puesto el valor numérico del varchar lo editamos desde la ventana siguiente directamente.

tabla

Descargamos el mysql jconnector segun la versión de mysql instalada, como en este ejemplo esta instalado la versión 5.0, se descarga la versión de jconnector para esa versión. Podemos ver que existen varias versiones y para cada versión existe el correspondiente fichero para linux o windows

jconnector

una vez descargado se descomprime el fichero dentro de la carpeta creada nos interesa importar solamente el fichero mysql-connector-java-5.0.8-bin.jar (el número depende de la versión de cada uno)

conector

Creamos un nuevo proyecto web dinámico al igual que hacíamos en otros post y el directorio WebContent\WEB-INF\lib importamos el conector de bases de datos al igual que hacíamos con las imagenes en anteriores post.

importar

Con esto solo ya funcionaría, pero en ocasiones eclipse nos muestra un error por no importar el jar en path del proyecto web

Botón derecho sobre el proyecto build path y configure build path y add external jar
path

creamos un package nuevo “conexion” y creamos un servlet nuevo llamado “basedatos” y activamos los siguientes métodos en la creación del servlet

init

resultado de introducir un nuevo registro visto desde el terminal con mysql

msqltabla

Realización de la conexión con un servlet, el método init del servlet se utiliza para para cargar los datos de la configuración del acceso a la base de datos antes de realizar cualquier operarción incluso este método puede recibir parámetros de configuración provenientes del fichero web.xml.

El servlet una vez cargado puede recibir peticiones get o post como habíamos explicado en anteriores post, cuando hacemos click con el botón derecho del ratón sobre el servlet run as ( o bien con el tomcat arrancado y http://localhost:8080/basedatos/basedatos siendo esto último nombre proyecto/servlet ).

Cuando se llama directamente interviene el método get y da como respuesta una página web con un formulario para introducir los campos para la tabla, esos campos se pasan al servlet mediante el método post y es entonces cuando se recogen los parámetros de la petición para establecer la inserción del registro en la tabla y la selección de los campos para la tabla.

Se obtiene el resultado en un objeto de la clase “ResultSet” y se itera por los registros mediante el método “next()”.

La salida por pantalla se pone la dtd para reconocimiento de la css y además los caracteres “\n” para ver el código html generado en el navegador de una forma escalonada.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
package conexion;
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
 
 
/**
 * Servlet implementation class for Servlet: basedatos
 *
 */
 public class basedatos extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
   static final long serialVersionUID = 1L;
 
    /* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#HttpServlet()
	 */
 
 
    private Connection conexion = null;
    private Statement sentenciaSql = null;
    private ResultSet  resultado = null;
 
	public basedatos() {
		super();
	}   	
 
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		super.init();
 
		try
		{
			String controlador = "com.mysql.jdbc.Driver";
 
			Class.forName(controlador).newInstance();
 
			//conectamos con la base de datos
			conexion = DriverManager.getConnection("jdbc:mysql://localhost:3306/libros_jdbc","root","root");
 
			//creamos una sentencia sql
			sentenciaSql = conexion.createStatement();			
 
 
		}
		catch ( ClassNotFoundException e )
		{
			System.out.println("no se pudo cargar el controlador");
		}
		catch ( SQLException e)
		{
			System.out.println("Excepcion sql"+e.getMessage());
		}
 
		catch (InstantiationException e )
		{
			System.out.println ("objeto no creado"+e.getMessage());
		}
 
		catch ( IllegalAccessException e )
		{
			System.out.println("Acceso ilegal"+e.getMessage());
		}
	}  
 
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setContentType("text/html");
 
		PrintWriter salida = response.getWriter();
 
		//creamos la salida del html
		salida.print("<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n");
		salida.print("<html>\n");
	        salida.print("<head>\n");
	        salida.print("<link rel='stylesheet' type='text/css' href='css/estilo.css'/>\n");	    
	        salida.print("</head>\n");
		salida.print("<body>\n");
		salida.print("<div id='contenedor'>\n");
		salida.print("<h2> Libros jdbc </h2>");
		salida.print("<div id='imagen'>");
		salida.print("<img src='imagenes/registro.png' title='carpeta'/>");
		salida.print("</div>");
		salida.print("<form action='basedatos' method='post'>\n<br/>");
		salida.print("<label>Titulo</label>\n<br/>");
		salida.print("<input type='text' name='titulo'/>\n<br/>");
		salida.print("<label>Autor</label>\n<br/>");
		salida.print("<input type='text' name='autor'/>\n<br/>");		
		salida.print("<label>Tematica</label>\n<br/>");
		salida.print("<input type='text' name='tematica'/>\n<br/>");
		salida.print("<input class='boton' type='submit' value='enviar'/>\n<br/>");		
		salida.print("</form>\n<br/>");
		salida.print("<div id='pie'>");
		salida.print("<p> www.railsymas.com </p>");
		salida.print("</div>");
 
		salida.print("</div>\n");
		salida.print("</body>\n<br/>");
		salida.print("</html>");
 
 
 
 
	}  	
 
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
 
		//recogemos la petición realizada por el usuario en el formulario
		String valorTitulo = request.getParameter("titulo");
		String valorAutor = request.getParameter("autor");
		String valorTematica = request.getParameter("tematica");
 
		response.setContentType("Text/html");
 
		PrintWriter salida = response.getWriter();
 
		try
		{
			//metemos las cadenas con comas e insertamos los datos
			sentenciaSql.executeUpdate("insert into libros values ("+0+",'"+valorTitulo+"','"+valorAutor+"','"+valorTematica+"');");
 
			//ejecutamos la sentencia de selección de los campos menos el id
			resultado = sentenciaSql.executeQuery(" SELECT titulo, autor, tematica  FROM libros;");
 
			//preparamos la salida para una nueva página
			salida.print("<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n");
			salida.print("<html>\n");
		    salida.print("<head><title>Mostramos los datos</title></head>\n");
		    salida.print("<link rel='stylesheet' type='text/css' href='css/estilo.css'/>\n");	
			salida.println("<body>");
			salida.print("<div id='contenedor'>\n");
			salida.print("<h2> Libros jdbc </h2>");
			salida.println("<table id='tabla'>");
			salida.println("<tr>");
			salida.println("<th>titulo</th><th>autor</th><th>tematica</th>");
			salida.println("</tr>");
			while ( resultado.next())
			{   
 
				salida.println("<tr>");				
				salida.println("<td class='impar'>"+resultado.getString("titulo")+"</td>");
				salida.println("<td class='par'>"+resultado.getString("autor")+"</td>");
				salida.println("<td class='impar'>"+resultado.getString("tematica")+"</td>");
				salida.println("</tr>");
			}
 
			   salida.println("</table>");
			   salida.print("<div id='pie'>");
			   salida.print("<p> www.railsymas.com </p>");
			   salida.print("</div>");
			   salida.print("</div>\n");
			   salida.println("</body>");
			   salida.println("</html>");
 
		}
		catch( 	SQLException e )
		{
			salida.println("Excepcion Sql : "+ e.getMessage());
		}
 
 
	}   	  	  
 
	/* (non-Javadoc)
	 * @see javax.servlet.GenericServlet#init()
	 */
 
}

Fichero css utilizado

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#contenedor{
	width:500px;
	margin-left:auto;
	margin-right:auto; 
}
 
 .boton {
   margin: 10px 5px;
   background-color:#554444;
   color:#fff; 
   width:100px;
  }
 
  #imagen {
   float:right;
  }
 
  #pie {
     clear:both;
     height:30px;
     background-color:#424c56;  
  }
 
  h2 { text-align:center }
 
  #pie p {
   text-align:right;
   font-size:14px;
   background-color:#e6dfd5;
   }
 #tabla { 
 
  margin-left:auto;
  margin-right:auto; 
 
  }
 
 #tabla th { background-color:#48a2b5;}
 
 td.impar { 
 
   color: #222;
   margin-right:10px;
   margin-left:10px;
   background-color:#e6dfd5;
  }
 
 td.par
  { color: #ddd;
    margin-right:10px; 
    background-color:#554444; 
  }

Imagen formulario

forjdbc

imagen del proyecto

Imagen resultado

resultadostabla

Enlace como crear un serlvet con eclipse y ejecutar desde el eclipse para encontrar recursos

Una vez instalado tomcat ( en windows es un ejecutable) en linux el enlace aquí

instalación tomcat

Un manejador de tomcat para elipse

tomcat eclipse

Como crear un servlet con eclipse entro del eclipse

Crear un servlet

Ejecución de un servlet basesdatos

Al hacer new servlet, se crea la configuración automáticamente, algunas veces falla pero pocas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<servlet>
		<description>
		</description>
		<display-name>
		basedatos</display-name>
		<servlet-name>basedatos</servlet-name>
		<servlet-class>
		conexion.basedatos</servlet-class>
	</servlet>
 
	<servlet-mapping>
		<servlet-name>basedatos</servlet-name>
		<url-pattern>/basedatos</url-pattern>
	</servlet-mapping>

Comentarios (7)

gracias, programo para web en php normalmente, me sirvio este ejemplo para enteder todo esto de java para web

Muy interesante

hola, buen dia,

soy nuevo en esto y estaba probando tu aplicacion, solo que no me corre, me dice que el recurso requerido no esta disponible, podras ayudarme?

para ejecutar el servlet, basta en eclipse con pulsar con el botón derecho del ratón y run as on server, si al hacer esos pasos sale por el navegador lo siguiente:

Estado HTTP 404 -

type Informe de estado

mensaje

descripción El recurso requerido () no está disponible.

Puede que no esté mapeado el servlet en el fichero web.xml, normalmente en eclipse al hacer new servlet genera automáticamente dicho codigo pero algunas veces no es así.

en el fichero web.xml de la aplicación para un servlet llamado como aquí basesdedatos y con una clase en la package conexión.basededatos el fichero we.xml tendría


<servlet>
<description>
</description>
<display-name>
basedatos</display-name>
<servlet-name>basedatos <servlet-class>
conexion.basedatos</servlet-class>
</servler>

una descripción opcional, el nombre del servlet y el path de la clase servlet. pienso que podría ser eso suele pasar algunas veces con eclipse.

para el caso concreto si no accede a la base de datos saltaría una excepción

hola

estoy probando tu aplicacion, a mí también me dice que el recurso requerido no esta disponible, he puesto la entrada de web.xml y nada…. puedes ayudarme?

Gracias

hay posibilidades de ejecución si se crea el proyecto en eclipse,

1 crear un proyecto web dinámico en eclipse, crear un nuevo servlet “basedatos”, y después se puede exportar a war, ese fichero se puede arrar el tomcat y poner http:\\localhost:8080\nombredelprojecto\nombredelservlet, para un proyecto “proyectoweb” y servlet “basedatos” sería http:\\localhost:8080\proyectoweb\basedatos

2 ejecutar desde el propio eclipse sería tener una instancia del tomcat y pulsar sobre el fichero servlet “basedatos” botón derecho run as, run on servlet, automáticamente sale la ruta del caso 1 (más sencillo)

Si hay un problema en el código desde el navegador o por consola en el eclipse sale un listado de errores, pero si no sale más que un aviso por el navegador, de recurso no disponible es que estamos accediendo a una página no existenten en el proyecto, no se esta enterando la aplicación que tiene algo que queremos mostrar

nota-) Si tenemos el tomcat arrancado y ejecutamos una aplicación con el manejador de tomcat desde elipse no nos funciona debemos apagar el tomcat bien desde windows stop server y desde linux tomcat\bin\ ./shutdown.sh y ya se puede hacer run on server desde eclipse (es decir los dos a la vez tomcat y manejador no funcina)

Gracias, lo he arreglado añadiendo el servlet-mapping

basedatos
conexion.basedatos

basedatos
/basedatos

Escribe un comentario