Saltar al contenido
Underc0de /foro

AYUDA en conexion por favor

Iniciado por REMHINOB, Mayo 18, 2019, 09:53:32 AM

Tema anterior - Siguiente tema

0 Miembros y 0 Visitantes están viendo este tema.

Avatar de REMHINOB
Mayo 18, 2019, 09:53:32 AM Ultima modificación: Mayo 18, 2019, 10:26:08 AM por Gabriela

Hola me pueden ayudar por favor, tengo esta clase conexion

public class Conexion {
   
    public static Connection connection;

    private static final String HOST="192.168.0.122";
    private static final String DB="siscon";
    private static final String USER="root";
    private static final String PASS="";
       
    public static void Conexion(){
        connection=null;
        try{
            String url="jdbc:Los enlaces son solo para miembros. Registrate o iniciá sesión + HOST + "/" + DB;
            Class.forName("com.mysql.jdbc.Driver");
            connection=(Connection) DriverManager.getConnection(url,USER,PASS);
            System.out.println("Conexion Abierta");
        }catch(SQLException e){
            System.out.println("SQLException " + e.getMessage());
        }catch(ClassNotFoundException e){
            System.out.println("Exception " + e.getMessage());
        }

    }
}

y una clase GestionDatos con el cual extraigo datos de mi BD y lo almaceno en una array.

package Clases;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
*
* @author sniper
*/
public class GestionDatos {
    Eventos evento=new Eventos();
    PreparedStatement pst;
    ResultSet rs;
public String[] extraerDatos(String sql,int columnas){
            String[]datos=new String[columnas];
            try{
                pst=Conexion.connection.prepareStatement(sql);
                rs=pst.executeQuery(sql);
                if(rs.next()){
                    for(int x=0;x<datos.length;x++){
                        datos
  • =rs.getString(x+1);
                        }
                    }
                    return datos;
                }
                catch(SQLException e){
                       System.out.println(e.getMessage());
                }
                return null;
        }
    }

    cuando lo ejecuto me sale el error:
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

    QUE ESTOY HACIENDO MAL?? GRACIAS POR su respuesta
WhatsApp Telegram

2 respuestas

Avatar de rommel360
Veo que el error eta en esta parte

Código: java

String[]datos=new String[columnas];

for(int x=0;x<datos.length;x++){
                        datos

    =rs.getString(x+1);


                    }


lo que pasa es que te estas saliendo del arreglo, por ejemplo si colomnas vale 5 entonces tu arreglo datos mide 5

pero si tu consulta SQL solo trajo 3 valores. entonces se sale de la longitud ya que el ciclo FOR tiene que llegar hasta el 4 ( del 0 al son 5 elementos )
cuando en realidad solo tiene que llegar al 3 porq es el total de elementos que tiene tu consulta.

Y si en dado caso cuando datos mida 2 ahora te van a faltar elementos ya q no va arecorrer todos los datos de la consulta por eso mejor

usan while( resultado.next()) a sii no importa cuantos datos tnga solamente se va arecorrer los que deben de ser. ni mas ni menos

espero haberme explicado jijijijj

alguna recomendacion:

al ser sentencia preparada, algo que debe de llevar tu consulta es ? por cada valor que lleve por ejemplo

SELECT aPterno, aMaterno, Nombre FROM clientes WHERE idCliente = '0001' AND fecha > '2019-01-08';

Tendria que ir a si
SELECT aPterno, aMaterno, Nombre FROM clientes WHERE idCliente = ? AND fecha > ?;

//Luego tienes q
conexion.pst.setString( 1, '0001' );
conexion.pst.setString( 1, '2019-01-08' );

resultadio = conexion.pst.executeQuery();

usa mejor un While en vez del IF de todas manera si la consulta no trajo nada entonces no entra al While

while( valores.next() )
{

}

Avatar de rommel360
también en vez de acceder al resultado por el numero de la columna puedes acceder por el nombre de la columna, tambien podrias acceder pormedio de un ArrayList<String[]> arreglo = new ArrayList<>(); y asii ya no te preocupas de definir le un tamaño y solamente con el metodo addElement vas agregando los valores

Código: java

while( valores.next() )
{
       arreglo.addElement(valores.getString( "IDReferencia" ))
       areglo.addElement(valores.getString( "IDPaciente" ));
      areglo.addElement( valores.getString( "IDUMedicaEnvia" ));

}




pero si es con el arreglo de String que difiniste solo tendría un cambio

Código: java

int x = 1;//no recuedo si las columnas de una tabla empiezan por 0 o desde el 1 jajajaja
while(rs.next())
{
datos[x-1]=rs.getString(x);
//x-1 por q los arreglos empiezan desde el 0 a contar y el otro lado solo queda como x ya q tiene el 1 y es el primer campo de la tabla y a si tambien para que no se salga del tamaño del arrglo en caso de que si empiece por el 1 las columnas de una tabla entonces solo ponemos datos[x]

x++;
}


¿Te quedó una duda sobre Dudas y pedidos generales?

Preguntala y te responde la comunidad (y el asistente Underc0de IA si nadie llega antes). Es gratis y tarda un minuto.

Ya tengo cuenta
Guardamos tu pregunta en este navegador: después de entrar la publicás con un clic.
Grupo de WhatsApp