AYUDA en conexion por favor

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

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

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:No tienes permitido ver los links. Registrarse o Entrar a mi cuenta + 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

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( No tienes permitido ver los links. Registrarse o Entrar a mi cuenta()) 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( No tienes permitido ver los links. Registrarse o Entrar a mi cuenta() )
{

}

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++;
}