Inserir ResultSet em um Array Unidimensional

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

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/

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

[code]PreparedStatement stmt = null;
ResultSet rs = stmt.executeQuery(bdmarisa);

    List palavras = new ArrayList();  
      
    while(rs.next()) {  
     palavras.add(rs.getString("pal"))  
    } [/code]

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

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

[code]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;
    }

}
[/code]

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

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:

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

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?)

[code]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"));  
}  [/code]

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");

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

qual é o erro?

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

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

deu certinho sim…

[quote=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
[/quote]

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…

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

vou ver sim, obrigada! ;]

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…