Article View: es.comp.lenguajes.java
Article #17970Jserv, jdbc y Apache
From: dr7tbien
Date: Mon, 09 Oct 2000 00:00
Date: Mon, 09 Oct 2000 00:00
253 lines
7320 bytes
7320 bytes
Hace unos dias que instalé Jserv sobre Apache. Para ello usé el
siguiente comando:
./configure --prefix=/usr/local/httpd
A continuación fuí a la página siguiente y todo fué bien
http://localhost/servlets/Hello and also worked right.
Ahora estoy desarrollando un servlet que se conecta a una base de datos
postgres. Para ello he usado la forma de conexión a la base de datos de
un código de otro programa que lo hace estupendamente, pero en línea de
comandos. A continuación el código que se ejecuta sin problemas:
/********************************************************/
import java.sql.*;
/**
* Esta clase se conecta con el motor postgres y la base de datos
'mydb'. Una forma de uso sería:
* java EjecutaSQL "select * from weather"
* @author dr7tbien
*/
public class EjecutaSQL
{
public static void main (String[] args)
{
if (args.length!=1)
{
System.out.println("Introduzca la sentencia SQL");
System.out.println("java EjecutarSQL \"Select * from
weather\"");
System.exit(1);
}
/**
* Se establece la conexión con la base de datos mediante el método
* static Connection conectate (String dsn) y obtenemos un objeto
Connection
* para conectarnos a mydb
*/
Connection conexion = null;
try
{
conexion = conectate("mydb");
}
catch(Exception ex){
System.out.println("Error al conectarse a la BD: " + ex);
System.exit(1);
}
/**
*Intentamos ejecutar la sentencia de args[0]
*/
System.out.println(args[0]);
try{
Statement stmt = conexion.createStatement();
if(stmt.execute(args[0]))
imprimeResultSet(stmt.getResultSet());
else
System.out.println(stmt.getUpdateCount() + "registros
afectados.");
}
catch(SQLException ex){
System.out.println("Error al ejecutar la sentencia: " +
ex.toString());
}
}
static Connection conectate (String dsn) throws Exception {
Class.forName("postgresql.Driver");
return DriverManager.getConnection("jdbc:postgresql:"+dsn,
"postgres", "");
}
static void imprimeResultSet(ResultSet rs) throws SQLException {
ResultSetMetaData meta = rs.getMetaData();
int ncolumnas = meta.getColumnCount();
//Imprime la cabecera
for (int i=1;i<=ncolumnas; i++)
System.out.print(meta.getColumnName(i) + '\t');
System.out.println();
//Imprime los datos del ResultSet
while (rs.next())
{
for(int i=1;i<=ncolumnas;i++)
System.out.print(rs.getString(i) + '\t');
System.out.println();
}
}//Fin de ImprimeResultSet
}//Fin de la clase
/***************************************************************/
Ahora estoy intentando lo mismo pero con un servlet usando la misma
forma de conexion a la base de datos. Este servlet llama a la siguiente
clase, que es la encargada de conectarse a la base de datos:
/******servlet code called by other servlet & a html page ******/
import java.sql.*;
/*
*Esta clase es la encargade meter todo tipo de datos en un base de
datos, en este caso es postgress
*y el nombre es mydb
*
*@author dr7tbien
*/
class EjecutaSQL{
String query;
Connection conexion=null;
public EjecutaSQL(String s){
query = s;
}
/**
*Este método es el encargado de insertar datos en la tabla.
Devuelve un String que contiene
*las columnas con los valores que se han introducido
*/
public String insertarDatos(){
String valores;
int col;
Statement stmt;
try {
conexion = conectate("mydb");
}catch(Exception e){
/*---------> the following line is the problem
*/
String s = new String("Error al conectarse a la base de
datos: "+e.toString());
return s;
}
try{
stmt = conexion.createStatement();
col = stmt.executeUpdate(query);
}catch(SQLException e){
return "Error al intentar insertar datos";
}
try{
valores=imprimeResultSet(stmt.getResultSet());
}catch(SQLException e){
return "Algo pasa que no rula esto";
}
return valores;
}//Fin public boolean insertarDatos()
/*
*Método encargado de la conexión a la base de datos
*
*/
static Connection conectate(String dsn) throws Exception {
Class.forName("postgresql.Driver");
return DriverManager.getConnection("jdbc:postgresql:"+dsn,
"postgres", "");
}
/*
*Este método es llamado por los métodos de consulta y
manipulación
de las bases de datos a fin de
*obtener una cadena de caracteres en html con los resultados de
la
consulta
*/
static String imprimeResultSet(ResultSet rs) throws SQLException{
StringBuffer html = new StringBuffer("<TABLE WIDTH=80%><TR>");
ResultSetMetaData meta = rs.getMetaData();
int cols = meta.getColumnCount();
for (int i= 0; i < cols; i++){
html.append("<th>" +meta.getColumnName(i)+"</th>");
}
html.append("</tr><tr>");
while(rs.next()){
for(int i=1; i<=cols; i++)
html.append("<td>"+rs.getString(i)+"</td>");
}
return html.toString();
}
}
/********************************************************/
ESta clase compila pefectamente, así como el servlet q la llama. Cuando
ejecuto el servlet, yo obtengo la siguiente respuesta:
java.lang.ClassNotFoundException: postgresql.Driver
Que ocurre? Porque esta clase no encuentra el driver de postgres y el
código del programa anterior se ejecuta sin problemas? Le yendo la conf
de Jserv, he intentado reconfigurar usando:
configure --width-JSDK=/usr/local/JSDK2.0/lib/jsdk.jar
Pero esta orden no funciona, me responde: "invalid option"
POr favor, cómo sería la forma de que el servlet encuentre el postgres
driver?
Gracias anticipadas
Technical Details
Message-ID:
<39E19974.874D1C4D@terra.es>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: 1116f3,a36b09ed272b019b,start X-Google-Attributes: gid1116f3,public From: dr7tbien <dr7tbien@terra.es> Subject: Jserv, jdbc y Apache Date: 2000/10/09 Message-ID: <39E19974.874D1C4D@terra.es> X-Deja-AN: 679217462 Content-Transfer-Encoding: quoted-printable X-Accept-Language: es-ES, en Content-Type: text/plain; charset=iso-8859-1 X-Complaints-To: usenet@teleline.es X-Trace: telenews.teleline.es 971077637 193.153.97.47 (Mon, 09 Oct 2000 09:47:17 MET DST) Organization: Clientes_Teleline MIME-Version: 1.0 NNTP-Posting-Date: Mon, 09 Oct 2000 09:47:17 MET DST Newsgroups: es.comp.lenguajes.java