conexiones bbdd en un jsp

sieh
21 de Septiembre del 2005
Hola,

trato de hacer varias conexiones a bases de datos sql server y tengo un problema. El problema surge cuando en la misma pagina conecto sobre una base de datos dos veces en diferentes tablas...aqui os paso el codigo q utilizo:


<BODY>
<TD><SELECT NAME="contacto" onchange="personal()"><OPTION value="0">Persona que llama....</option>

<%@ page import="java.sql.*" %>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="javax.servlet.*" %>


<%

Connection conexion1 = null;
ResultSet tabla1= null;
Statement instruccion1=null;

try
{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conexion1=DriverManager.getConnection("jdbc:odbc:prueba","","");
//out.println("Conexion con exito a :" + conexion1.getCatalog());
instruccion1 = conexion1.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
}
catch(java.lang.ClassNotFoundException e){
out.println("error en forName");
} catch(SQLException e) {
out.println("error al cargar instruccion");
};

String combo1="Select * from Emisores order by Apellidos";
try { tabla1 = instruccion1.executeQuery(combo1);

// Rellenar los campos del select
while(tabla1.next()) {
out.println("<option value="+ tabla1.getString("IdEmisor")+">"+ tabla1.getString("Nombre")+" " + tabla1.getString("Apellidos"));
out.println("</option>");
}
}
catch(SQLException e) {
out.println("error en la instruccion");
} catch(Exception e){
out.println("error al cerrar");
}

tabla1.close();
instruccion1.close();
conexion1.close();


%>
</SELECT></TD>
<TD><INPUT TYPE="button" CLASS="BOTON_CORP" name="anadircontacto" value="Añadir contacto" onclick=location='nuevocontacto.jsp'></TD>
</TABLE>
</TD>
<TR>
<TD><SELECT NAME="organizacion" >
<OPTION> Seleccione empresa... </OPTION>


<%


Connection conexion3 = null;
ResultSet tabla3= null;
Statement instruccion3=null;

try
{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conexion3=DriverManager.getConnection("jdbc:odbc:ramon","","");
//out.println("Conexion con exito a :" + conexion.getCatalog());
instruccion3 = conexion3.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
}
catch(java.lang.ClassNotFoundException e){
out.println("error en forName");
} catch(SQLException e) {
out.println("error al cargar instruccion");
};
String combo3="select * from members order by last_name";
try { tabla3 = instruccion3.executeQuery(combo3);

// Rellenar los campos del select
while(tabla3.next()) {
out.println("<option value="+ tabla3.getString("member_id")+">"+ tabla3.getString("first_name"));
out.println("</option>");
}
}
catch(SQLException e) {
out.println("error en la instruccion");
} catch(Exception e){
out.println("error al cerrar");
};

tabla3.close();
instruccion3.close();
conexion3.close();

%>

%>

</SELECT></TD>


<TD><SELECT NAME="organizacion" >
<OPTION> Seleccione empresa2... </OPTION>


<%


Connection conexion4 = null;
ResultSet tabla4= null;
Statement instruccion4=null;

try
{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//conexion4=DriverManager.getConnection("jdbc:odbc:prueba","","");
out.println("Conexion con exito a :" + conexion4.getCatalog());
instruccion4 = conexion4.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
}
catch(java.lang.ClassNotFoundException e){
out.println("error en forName");
} catch(SQLException e) {
out.println("error al cargar instruccion");
};
String combo4="select * from Empresas";
try { tabla4 = instruccion4.executeQuery(combo4);

// Rellenar los campos del select
while(tabla1.next()) {
out.println("<option value="+ tabla4.getString("IdEmpresa")+">"+ tabla4.getString("Nombre"));
out.println("</option>");
}
}
catch(SQLException e) {
out.println("error en la instruccion");
} catch(Exception e) {
out.println("error al cerrar");
};

tabla4.close();
instruccion4.close();
conexion4.close();



%>

</SELECT></TD>

</TR>
</BODY>

Y el error que surge es el siguiente:

type Informe de Excepción

mensaje

descripción El servidor encontró un error interno () que hizo que no pudiera rellenar este requerimiento.

excepción

org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


causa raíz

java.lang.NullPointerException
org.apache.jsp.carga1_jsp._jspService(carga1_jsp.java:184)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


nota La traza completa de la causa de este error se encuentra en los archivos de diario de Apache Tomcat/5.0.28.


Muchas gracias y un saludo!!!

Alberto
21 de Septiembre del 2005
Yo te recomendaría que no realices las gestiones de la BBDD desde la JSP ya que tardará más en abrir la página. Hazlo desde el servlet u otra clase java.
- Antes de llamar a la JSP vas a un servlet. Desde aqui realizas la consulta e insertas los datos en un Vector.
Este objeto viaja a la jsp a través de la session y es ahora donde vas rellenando el combo con los datos del vector

jtacosta
21 de Septiembre del 2005
Estoy de acuerdo con ALberto. Nunca llames a la BBDD desde la jsp.
La jsp solo deberia pintar datos que se han obtenido en el servlet.
No metas gestion de negocio en las jsp, ya que se te puede complicasr el proyecto mucho

ratxamala
21 de Septiembre del 2005
adjunto un archivo .java a una conexion a base de datos ademas de algunos metodos muy utiles como consulta, actualizacion, insercion...

package trionix;

import java.io.*;
import java.net.*;
import java.sql.*;
import java.util.*;

public class ConexionTrionix {

// Configuracion de la conexion a la base de datos

private String DB_driver = "";
private String url = "";
private String username = "";
private String password = "";
private Connection con = null;
private Statement stmt = null;
private ResultSet rs = null;
private String query = null;


// Constructor sin parámetros
ConexionTrionix (){
DB_driver = "org.gjt.mm.mysql.Driver";
url = "jdbc:mysql://localhost:3306/trionix";
username ="";
password ="";

//Asignación del Driver
try {
Class.forName(DB_driver);
}
catch (ClassNotFoundException cnfx) {
System.out.println("No se pudo cargar el Driver Correctamente!");
}
// Realizar la conexión
try {
con = DriverManager.getConnection(url, username, password);
}
catch (Exception e) {
e.printStackTrace();
}

}

// Constructor con parámetros
ConexionTrionix(String driver, String url, String usuario, String passw){
this.DB_driver = driver;
this.url = url;
this.username = usuario;
this.password = passw;

//Asignación del Driver
try {
Class.forName(DB_driver);
}
catch (ClassNotFoundException cnfx) {
System.out.println("No se pudo cargar el Driver Correctamente!");
}
// Realizar la conexión
try {
con = DriverManager.getConnection(url, username, password);
}
catch (Exception e) {
e.printStackTrace();
}
}


//Retornar la conexión
public Connection getConnection() {
return con;
}


// Método que devuelve un ResultSet de una consulta (tratamiento de SELECT)
public ResultSet consultarBD(String sentencia) {
try{
stmt = con.createStatement();
rs = stmt.executeQuery(sentencia);
}
catch(SQLException sqlex){sqlex.printStackTrace();}
catch (RuntimeException rex) {rex.printStackTrace();}
catch (Exception ex) {ex.printStackTrace();}
return rs;
}

// Método que realiza una operación como UPDATE, DELETE, CREATE TABLE, entre otras
// y devuelve TRUE si la operación fue existosa
public boolean actualizarBD (String sentencia){
try{
stmt = con.createStatement();
stmt.executeUpdate(sentencia);
}
catch(SQLException sqlex){
System.out.println("ERROR RUTINA: "+ sqlex);
return false;
}
catch (RuntimeException rex) {
System.out.println("ERROR RUTINA: "+ rex);
return false;
}
catch (Exception ex) {
System.out.println("EXCEPCION: "+ ex);
return false;
}
return true;
}

// Método que realiza un INSERT y devuelve TRUE si la operación fue existosa
public boolean insertarBD (String sentencia){
try{
stmt = con.createStatement();
stmt.execute(sentencia);
}
catch(SQLException sqlex){
System.out.println("ERROR RUTINA: "+ sqlex);
return false;
}
catch (RuntimeException rex) {
System.out.println("ERROR RUTINA: "+ rex);
return false;
}
catch (Exception ex) {
System.out.println("EXCEPCION: "+ ex);
return false;
}
return true;
}

public void cerrarConexion(){
try {
if (con != null)
con.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}