Duvidas com rs.next();

Pessoal… sou iniciante em JAVA, gostaria de saber por que nao consigo incrementar o valor da variavel “I” a cada loop que o rs.next(); faz!
Utilizo o NetBeans e ele alerta que nao posso ter uma variavel sendo referenciada por outra estática.

Aqui vai o meu código com a area de erro destacada!

[quote]import java.sql.*;

class Main{
String[] arrayNomes = new String[9999];
String[] arrayUsuarios = new String[9999];
String[] arraySenhas = new String[9999];
int i = 0;
String a;

public static void main (String[] args) { 
    try { 

        // Step 1: Load the JDBC driver. 
        //Class.forName("com.mysql.jdbc.Driver"); 

        // Step 2: Establish the connection to the database. 
        String url = "jdbc:mysql://localhost:3306/geomap"; 
        Connection conn = DriverManager.getConnection(url,"root","geomap");
        String sql = "SELECT * FROM `tab_usuarios`";
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(sql);
        
        System.out.println("Numero de Registros: " + stmt.getFetchSize());

while (rs.next()){
//System.out.println(rs.getString(“TU_NOME”));
i++;
}

conn.close();

    } catch (Exception e) { 
        System.err.println("Got an exception! "); 
        System.err.println(e.getMessage()); 
    } 
    
} 

} [/quote]

Outra dúvida, é saber o numero de registros que retornaram da consulta, pois quero colocar os valores dentro de um array para poder manipular depois!

Agradeço desde já a ajuda de vocês…
Obrigado!

até +

MAs ele da algum erro ?? Teóricamente eh pra funcionar, a menos que a sua consulta não retorne nada…

Amigo,

A sua variavel i, é uma variavel de escopo do objeto e seu método main é do escopo da classe. Isso significa dizer que como o seu método é estático, ele só pode acessar variaveis estáticas da classe.
Uma solução que resolverá o seu problema é declarar todas as suas variáveis dentro do método. Assim não terá mais o erro de compilação. Veja o código abaixo.

import java.sql.*;

class Main{

//String[] arrayNomes = new String[9999];
//String[] arrayUsuarios = new String[9999];
//String[] arraySenhas = new String[9999];
//int i = 0;
//String a;

public static void main (String[] args) {
try {

String[] arrayNomes = new String[9999];
String[] arrayUsuarios = new String[9999];
String[] arraySenhas = new String[9999];
//int i = 0;
//String a;


// Step 1: Load the JDBC driver.
//Class.forName("com.mysql.jdbc.Driver");

// Step 2: Establish the connection to the database.
String url = "jdbc:mysql://localhost:3306/geomap";
Connection conn = DriverManager.getConnection(url,"root","geomap");
String sql = "SELECT * FROM `tab_usuarios`";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);

System.out.println("Numero de Registros: " + stmt.getFetchSize());


while (rs.next()){
//System.out.println(rs.getString("TU_NOME"));
i++;
}
conn.close();


} catch (Exception e) {
System.err.println("Got an exception! ");
System.err.println(e.getMessage());
}

}
}

Quanto a saber a quantidade de registros, creio que não seja possível com a classe ResultSet. Mas oque você pode fazer é ao inves de utilizar um array, usar o recurso de collections da linguagem. que vai alocando os recursos dinamicamente.

Teoricamente é pra NAO funcionar mesmo.

Sua classe tem uma variavel de instancia i, que cada objeto terá.
Entretanto dentro dessa classe vc declarou um método static.

O NB esta certo: variaveis non-static nao podem ser referenciadas dentro de um contexto static.
Entretanto nao preciso te explicar aqui a questao de static e non-static. Tem varias threads aqui no forum sobre isso. Leia e aprenda o pq.

sorry cagada minha mesmo, não li o código dele, apenas o while aIUhAIuhAiuAHiAh isso que da contar os segundos pra ir embora…

Putz aoqfonseca… valeu mesmo!

funcionou…
comecei a mexer com java hj…
to aprendendo ainda

Quanto ao numero de linhas, resolvi aqui tbm
é bem simples

rs.last();
int rows = rs.getRow();
rs.beforeFirst();

VALEU !
:lol: