Inserir ResultSet em um Array Unidimensional

16 respostas
Suellen_Susu

Bom dia pessoal!

Tenho o seguinte problema: estou fazendo um joguinho em java, em que a pessoa vai cadastrar as palavras no banco, e o jogo terá de sortear uma, cada vez que clicar num botão. Então, me aconselharam jogar essa lista de palavras do banco num array, e a partir dele realizar esse sorteio com o Math.random(). Só que a questão é que sei pouquissima coisa sobre arrays, e é a primeira vez que mexo com isso em java. Sendo assim, alguém poderia me mosrar ou dar-me uma dica de como eu poderia estar jogando esse resultset num array?

Obrigada desde já!

Suéllen Martinelli

16 Respostas

igor_ks

o problema está com Collection ou com ResultSet tb?

aqui vai um exemplo criado agora…

PreparedStatement stmt = null;
ResultSet rs = stmt.executeQuery(sql);

List lista = new ArrayList();
		
while(rs.next()) {
    lista.add(rs.getString("nomeCampoBanco"))
}

Se tiver problemas com conexato e ResultSet, tem um pequeno material de exemplo aqui: http://blog.luanmateus.com/utilizando-a-classe-resultset-java/

Suellen_Susu

Olha, eu fiz essa alteração minima e duas linhas ñ foram reconhecidas (a 2ª e a 5ª):

PreparedStatement stmt = null;  
        ResultSet rs = stmt.executeQuery(bdmarisa);  
  
        List palavras = new ArrayList();  
          
        while(rs.next()) {  
         palavras.add(rs.getString("pal"))  
        }

e a questão é com o ResultSet sim.... pq vc acha q seria com o Collection?

Suellen_Susu

Obs: minha classe de conexão com o banco tem o seguinte código...

import java.sql.*;

/**
 *
 * @author Suellen
 */
public class BD {
    
    public static Connection connection = null;
    public static Statement statement = null;
    public static ResultSet resultSet = null;
    public static final String DRIVER = "org.gjt.mm.mysql.Driver";
    public static final String URL = "jdbc:mysql://localhost/bdmarisa";
    
    /*O método faz a conexão com o banco de dados MySQL,
     * e retorna true se houver conectado, ou false em caso negativo.
     */

    public static boolean getConnection()
    {
        try
        {
            Class.forName(DRIVER);
            connection = DriverManager.getConnection(URL, "root", "123");
            statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            return true;
        }
        catch(ClassNotFoundException erro)
        {
            erro.printStackTrace();
            return false;
        }
        catch(SQLException erro)
        {
            erro.printStackTrace();
            return false;
        }
    }
    
    public static void close()//método que fecha os demais métodos.
    {
        closeResultSet();
        closeStatement();
        closeConnection();
    }
    
    private static void closeConnection()
    {
        try
        {
            connection.close();
            System.out.println("Desconectou");
        }
        catch(SQLException erro)
        {
            erro.printStackTrace();
        }        
    }
    
    private static void closeStatement()
    {
        try
        {
            statement.close();
        }  
        catch(Exception e)
        {
            e.printStackTrace();
        }        
    }
    
    private static void closeResultSet()
    {
        try
        {
            resultSet.close();
        }   
        catch(Exception e)
        {
            e.printStackTrace();
        }
    } 
    
    /*
     * Carrega o resultSet com o resultado do script SQL.
     */
    
    public static void setResultSet(String sql)
    {
        try
        {
            resultSet = statement.executeQuery(sql);
        } 
        catch(SQLException erro)
        {
            erro.printStackTrace();
        }        
    }
    
    /* Executa um script SQL de atualização
     * e retorna um valor inteiro, 
     * contendo a quantidade de linhas afetadas.
     */
    
    public static int runSQL(String sql)
    {
        int quant = 0;
        try
        {
            quant = statement.executeUpdate(sql);
        } 
        catch(SQLException erro)
        {
            erro.printStackTrace();
        }  
        return quant;
    }    

}
igor_ks

Talvez faltou import, mas de qualquer forma, este codigo está incompleto, fiz apenas para vc ver como popular uma lista, a partir de um resultado da query.

Antes disso, é preciso criar a conexão, escrever teu select do banco, popular o resultset. Isso tem no link que passei no post anterior

Suellen_Susu

Import ñ é, pois ja inseri todos…

O erro entao seria referente ao q vc disse depois entao, q tem q criar a outra classe, preencher o array com o resultado do banco e tal… mas eu to vendo o q vc me mandou, e msmo assim ñ to conseguindo fazer… :frowning:

mas obrigada pela ajuda, msmo assim… :slight_smile:

igor_ks

Hummmm, mas já tem a classe de Conexão prontinha, com o Statement e ResultSet, ai fica facinho

BD banco = new BD();
  banco.conn = banco.getConnection; //o certo era este getConnection já retornar um Connection
  banco.setResultSet("select pal from palavra");

  List palavras = new ArrayList();   

  while (banco.resultSet .next()) {
     palavras.add(rs.getString("pal"));
  }

Nisso vc tera uma lista com todas as palavras do banco populadas

Suellen_Susu

Então coloquei o código novo, mas ele da erro na 2ª linha, onde tem esse banco.conn (q tmb ñ entendi a função desse ".conn") sendo q ele grifa em vermelho o .conn e o .getConnection

E tmb deu erro na 6ª linha, em q é grifado em vermelho rs.getString (pra mim, o rs é o resultSet, certo? mas onde esta a declaração de rs?) ele me da duas opções no netbeans pra arrumar o erro, uma para criar a classe rs, e a outra para criar o campo rs. Qual devo usar?)

BD banco = new BD();  
    banco.conn = banco.getConnection; //o certo era este getConnection já retornar um Connection  
    BD.setResultSet("SELECT pal FROM palavra");  
  
    List palavraslist = new ArrayList();     
  
    while (BD.resultSet.next()) {  
     palavraslist.add(rs.getString("pal"));  
    }
sgaothaich

O método getConnection deve retornar uma Connection não um Boolean, quanto ao teu ResultSet, ele vem da classe BD, então tente:

BD.resultSet.getString("pal");
Suellen_Susu

O erro permanece, msmo realizando essa modificação.

sgaothaich

qual é o erro?

igor_ks

Opa, desculpe, é que estou codificando aqui direto no forum

o conn era pra ser o connection da classe BD, mas reparei agora que as variaveis sao estaticas, logo nao precisa instanciar a classe BD e acessar diretamente

Sim, a 6ª linha era pra ser resultSet :slight_smile:

O certo era vc mesmo identificar os problemas e corrigir, pois a intencao do forum é ajudar a chegar no resultado e não dar o resultado direto, pois bem

if (BD.getConnection()) {
	BD.setResultSet("Select pal from pergunta");
			
	List palavras = new ArrayList();     
			  
        try {
	     while (BD.resultSet.next()) {  
		 palavras.add(BD.resultSet.getString("pal"));  
	     }
	} catch (SQLException e) {
             e.printStackTrace();
	}  
}

agora só fazer o random ;D

Suellen_Susu

desculpa, ñ deu erro ñ, eu q digitei errado aki… :stuck_out_tongue:

deu certinho sim…

Suellen_Susu

igor_ks:
Opa, desculpe, é que estou codificando aqui direto no forum

o conn era pra ser o connection da classe BD, mas reparei agora que as variaveis sao estaticas, logo nao precisa instanciar a classe BD e acessar diretamente

Sim, a 6ª linha era pra ser resultSet :slight_smile:

O certo era vc mesmo identificar os problemas e corrigir, pois a intencao do forum é ajudar a chegar no resultado e não dar o resultado direto, pois bem

if (BD.getConnection()) {
			BD.setResultSet("Select pal from pergunta");
			
			List palavras = new ArrayList();     
			  
			try {
				while (BD.resultSet.next()) {  
				   palavras.add(BD.resultSet.getString("pal"));  
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}  
		}

agora só fazer o random ;D

Eu sei q a função do forum é a q vc disse acima, e desculpa se te atrapalhei… é q realmente ñ entendo nada dessa parte em java, e como ja disse antes, é a primeira vez q estou trabalhando com isso…

Mas, de coração, mto obrigada pela ajuda, o resto, como vc msmo disse, corro atras…

sgaothaich

Suellen, dê uma olhada na apostila FJ-21 da Caelum na parte sobre JDBC pra vc entender direitinho como funciona :smiley:

Suellen_Susu

vou ver sim, obrigada! ;]

igor_ks

nao digo isso pq me atrapalha nao, apenas pra que vc aprenda mesmo :smiley:

ajudo o forum, justamente pelo meu aprendizado e tb claro por ajudar os outros…

Criado 21 de outubro de 2011
Ultima resposta 21 de out. de 2011
Respostas 16
Participantes 3