conexiones bbdd en un jsp
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!!!
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!!!
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
- 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
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
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
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();
}
}
}
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();
}
}
}
