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:You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login + 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( You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login()) 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( You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login() )
{

}

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