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();
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.
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.