🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes.java
Article #17970

Jserv, jdbc y Apache

#17970
From: dr7tbien
Date: Mon, 09 Oct 2000 00:00
253 lines
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-mail

Show 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