[RESOLVIDO]Probleminha "SELECT FROM WHERE" com String

Olá!

Sou novato no Java e em POO, mas estou adorando!

Agora estou tendo um probleminha enjoado com o MySQL no Java…

public boolean getConnection(String c, String i) {  
    	
    	System.out.println("Testando acesso a banco de dado MySQL\n");
        Connection conn = null;
        String mySQL = "SELECT * FROM tabela WHERE tid = '"+c+"'";

        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost/bd", "root", "");
            System.out.println("A conexão foi um sucesso\n");
            Statement stm = conn.createStatement();
            ResultSet rs = stm.executeQuery(mySQL);

//(...)
//AQUI VEM O CÓDIGO QUE FAZ OS TESTES (if, etc.)
//(...)

        } catch(ClassNotFoundException e) {
            System.out.println("excessão Classe não encontrada");
            e.printStackTrace();
        } catch(SQLException e) {
            System.out.println("SQL Exception... Erro na consulta:");
            e.printStackTrace();
        } finally {
            try {
                conn.close();
                System.out.println("\nFechando a conexão");
            } catch(SQLException erro) {
                System.out.println("Erro no fechamento");
                erro.printStackTrace();
            }
        }

O resultado é sempre:

[quote]Testando acesso a banco de dado MySQL

A conexão foi um sucesso

SQL Exception… Erro na consulta:
java.sql.SQLException: Illegal operation on empty result set.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988 )
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:854)
at com.mysql.jdbc.UpdatableResultSet.checkRowPos(UpdatableResultSet.java:226)
at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5772)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5692)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5732)

Fechando a conexão[/quote]

Não tenho certeza se está certo:
String mySQL = “SELECT * FROM tabela WHERE tid = '”+c+"’";
pois a variável c é string e é fornecida ao se chamar a função.

Pesquisando pela net vi que o MySQL não entende diretamente uma string java, mas não entendi direito o que deve ser feito…

Agradeço qualquer ajuda desde já!

Duas coisas:

A primeira é que o teu problema está exatamente na parte de código que omitiste. Deves estar a tentar obter dados do resultset sem verificar se ha dados para obter. Por outras palavras, a tua query não devolve resultados.

Depois, usando SQL como tu estás a usar torna-se alvo fácil de alguém fazer coisas que não queres. Por exemplo, já pensaste se a tua String c tem como valor “’; DELETE FROM tabela;–” ? Para resolver este problema, usa PreparedStatement.

Bem, o problema foi um pouco mais complicado do que isso (tinha alguns erros de POO, inclusive em outras classes), mas essencialmente a resposta foi mesmo utilizar o PreparedStatement (que eu não tinha entendido até agora como utilizar…) e também o “rs.next()”.
Obrigado pmlm!