Incompatible types

21 respostas
F

estou tentando retornar essa SQL, mas estou com dificuldade na penultima linha, erro de incompatible types

public boolean listaNaoLocados(){
   String sql;
     try{
    st = con.createStatement();	  
    sql = "Select * from carro";
    rs = st.executeQuery(sql);

        if (rs.next()){
  	       placa = rs.getString(1);  
  	       marca = rs.getString(2);	
  	       modelo = rs.getString(3);
  	       taxaDiaria = rs.getFloat(4);    	         
  	       }
  	     else{
  	         st.close();
		  	  }
       }
	  catch(Exception e){
  	  		e.printStackTrace();
		  }
		  return sql;
    }

[]s

21 Respostas

mauriciofalves

Cara, você definiu para retornar um boolean e está tentando retornar uma string.

peron

seu método retorna um boolean e você está retornando uma String.

o certo, acredito que seria:

public List<Carro> listaNaoLocados(){
	List<Carro> carros = new ArrayList<Carro>();
	String sql;
	try{
		st = con.createStatement();
		sql = "Select * from carro where locado = 0";
		rs = st.executeQuery(sql);
		
		while (rs.next()){
			Carro c = new Carro();
			c.setPlaca(rs.getString(1));
			c.setMarca(rs.getString(2));
			c.setModelo(rs.getString(3));
			c.setTaxaDiaria(rs.getFloat(4));
			carros.add(c);
		}
                rs.close();
	}
	catch(Exception e){
		e.printStackTrace();
	}
	return carros;
}

PS: corrigi, trocando por um while o if, pois podem haver mais de um carro não locado.

Espero ter ajudado.

sds

F

Ah beleza…
deixei assim:

public String listaNaoLocados(){
   String sql;
     try{
    st = con.createStatement();	  
    sql = "Select * from carro";
    rs = st.executeQuery(sql);

        if (rs.next()){
  	       placa = rs.getString(1);  
  	       marca = rs.getString(2);	
  	       modelo = rs.getString(3);
  	       taxaDiaria = rs.getFloat(4);    	         
  	       }
  	     else{
  	         st.close();
		  	  }
       }
	  catch(Exception e){
  	  		e.printStackTrace();
		  }
		  return sql;
    }		  
		  
  public String getMarca(){
  	 return marca;
  }

e retorna esse erro na penultima linha:

“variable sql might not have been initialized”

neohacker
String sql = "";
gomesrod

Este método está um pouco estranho… porque você iria querer que ele te retorne o texto da query ? É muito mais lógico se ele te retornar o resultado, algo como o que fez o Peron.

F

Ué, ele não retorna o resultado da query? No caso, todas as informações da tabela carro?

[]s

peron

frnd:
Ué, ele não retorna o resultado da query? No caso, todas as informações da tabela carro?

[]s

Não,

Veja bem, você tá retornando a STRING SQL, e não o resultado dela. Para isso, ou você usa o código que te mostrei, que carrega todos os registros e colunas em objetos Carro, dentro de uma lista.

Para usar depois, é só percorrer a lista.

sds

F

Seguinte,
deixei desta forma:

public ListCarro listaNaoLocados(){   
    ListCarro carros = new ArrayList() ;   
    String sql;   
    try{   
        st = con.createStatement();   
        sql = "Select * from carro";   
        rs = st.executeQuery(sql);   
           
        while (rs.next()){   
            Carro c = new Carro();   
            c.setPlaca(rs.getString(1));   
            c.setMarca(rs.getString(2));   
            c.setModelo(rs.getString(3));   
            c.setTaxaDiaria(rs.getFloat(4));   
            carros.add(c);   
        }   
                rs.close();   
    }   
    catch(Exception e){   
        e.printStackTrace();   
    }   
    return carros;   
}

mas ainda retornam erros! oque eu errei afinal?

rafarcm

quais erros estao retornando desta vez???

Onde estao declaradas as variaveis st e rs ??? Pelo seu codigo elas nao estao declaradas

F

os erros são:

cannot find symbol
symbol  : class ListCarro
location: class Carros
    ListCarro carros = new ArrayList() ;   
    ^
symbol  : class ArrayList
location: class Carros
    ListCarro carros = new ArrayList() ;   
                           ^
symbol  : class Carro
location: class Carros
            Carro c = new Carro();   
            ^
symbol  : class Carro
location: class Carros
            Carro c = new Carro();   
                          ^
5 errors

No caso da declaração de ST e RS, não colouquei, apenas deixei do jeito que peron me passou.

rafarcm

Existe a classe ListCarro no seu progrma???

Acredito q deva ser este o erro.

Vc deve retornar um List

se as variaveis naum estiverem declaradas na classe onde o metodo se encontra e preciso cria-las

public List listaNaoLocados(){     
    List carros = new ArrayList() ;     
    String sql;     
   Statement st ;
   ResultSet rs ;

    try{     
        st = con.createStatement();     
        sql = "Select * from carro";     
        rs = st.executeQuery(sql);     
             
        while (rs.next()){     
            Carro c = new Carro();     
            c.setPlaca(rs.getString(1));     
            c.setMarca(rs.getString(2));     
            c.setModelo(rs.getString(3));     
            c.setTaxaDiaria(rs.getFloat(4));     
            carros.add(c);     
        }     
                rs.close();     
    }     
    catch(Exception e){     
        e.printStackTrace();     
    }     
    return carros;     
}

acho q assim deve funcionar

F

deram os mesmos erros!

:frowning:

rafarcm

Vc importou as classes List, ArrayList e Carro para o seu codigo??? O q esta acontecendo e q ele naum esta achando estas classes
coloque no inicio da classe as importações

Ex:

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.List;

esta faltando a Connection

public List listaNaoLocados(){       
	   List carros = new ArrayList() ;       
	   String sql;       
	   Statement st ;   
	   ResultSet rs ;   
	   Connection con = DriverManager.getConnection("jdbc:hsqldb:meuDB"); 
	  
	    try{       
	        st = con.createStatement();       
	        sql = "Select * from carro";       
	        rs = st.executeQuery(sql);       
	               
	        while (rs.next()){       
	            Carro c = new Carro();       
	            c.setPlaca(rs.getString(1));       
	            c.setMarca(rs.getString(2));       
	            c.setModelo(rs.getString(3));       
	            c.setTaxaDiaria(rs.getFloat(4));       
	            carros.add(c);       
	        }       
	            rs.close();       
	    }       
	    catch(Exception e){       
	        e.printStackTrace();       
	    }       
	    return carros;       
	}
F
C:\Documents and Settings\fernando trevizan\Desktop\Trabalho Java III\Exercício-03_Alterado\WEB-INF\classes\Carros.java:72: cannot find symbol
symbol  : class Carro
location: class Carros
                   Carros c = new Carro();         
                                  ^
C:\Documents and Settings\fernando trevizan\Desktop\Trabalho Java III\Exercício-03_Alterado\WEB-INF\classes\Carros.java:73: cannot find symbol
symbol  : method setPlaca(java.lang.String)
location: class Carros
                   c.setPlaca(rs.getString(1));         
                    ^
C:\Documents and Settings\fernando trevizan\Desktop\Trabalho Java III\Exercício-03_Alterado\WEB-INF\classes\Carros.java:74: cannot find symbol
symbol  : method setMarca(java.lang.String)
location: class Carros
                   c.setMarca(rs.getString(2));         
                    ^
C:\Documents and Settings\fernando trevizan\Desktop\Trabalho Java III\Exercício-03_Alterado\WEB-INF\classes\Carros.java:75: cannot find symbol
symbol  : method setModelo(java.lang.String)
location: class Carros
                   c.setModelo(rs.getString(3));         
                    ^
C:\Documents and Settings\fernando trevizan\Desktop\Trabalho Java III\Exercício-03_Alterado\WEB-INF\classes\Carros.java:76: cannot find symbol
symbol  : method setTaxaDiaria(float)
location: class Carros
                   c.setTaxaDiaria(rs.getFloat(4));         
                    ^
C:\Documents and Settings\fernando trevizan\Desktop\Trabalho Java III\Exercício-03_Alterado\WEB-INF\classes\Carros.java:77: cannot find symbol
symbol  : method add(Carros)
location: class Carros
                   Carros.add(c);         
                         ^
6 errors
peron

vc tem que criar a classe Carro …

sds

F

mas esse método está sendo criado dentro da classe Carros

F

agora está com erro nos campos lá da tabela

symbol  : method setPlaca(java.lang.String)
location: class Carros
                   c.setPlaca(rs.getString(1));         
                    ^
C:\Documents and Settings\fernando trevizan\Desktop\Trabalho Java III\Exercício-03_Alterado\WEB-INF\classes\Carros.java:74: cannot find symbol
symbol  : method setMarca(java.lang.String)
location: class Carros
                   c.setMarca(rs.getString(2));         
                    ^
C:\Documents and Settings\fernando trevizan\Desktop\Trabalho Java III\Exercício-03_Alterado\WEB-INF\classes\Carros.java:75: cannot find symbol
symbol  : method setModelo(java.lang.String)
location: class Carros
                   c.setModelo(rs.getString(3));         
                    ^
C:\Documents and Settings\fernando trevizan\Desktop\Trabalho Java III\Exercício-03_Alterado\WEB-INF\classes\Carros.java:76: cannot find symbol
symbol  : method setTaxaDiaria(float)
location: class Carros
                   c.setTaxaDiaria(rs.getFloat(4));         
                    ^
Note: C:\Documents and Settings\fernando trevizan\Desktop\Trabalho Java III\Exercício-03_Alterado\WEB-INF\classes\Carros.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
4 errors
F

Seguinte,
deixei desta maneira:

public List listaNaoLocados(){    
           List Carros = new ArrayList() ;         
           String sql;         
           Statement st ;     
           ResultSet rs ;     
           Connection con;  
            
            try{         
                st = con.createStatement();         
               sql = "Select * from carro";         
               rs = st.executeQuery(sql);         
                        
               while (rs.next()){         
                   Carros c = new Carros();         
                   //c.setPlaca(rs.getString(1));         
                   //c.setMarca(rs.getString(2));         
                   //c.setModelo(rs.getString(3));         
                   //c.setTaxaDiaria(rs.getFloat(4));         
                   Carros.add(c);         
               }         
                   rs.close();         
           }         
           catch(Exception e){         
               e.printStackTrace();         
           }         
           return Carros;         
       }

mas dá esse erro dentro do try…

variable con might not have been initialized

Marck

edit

F

oque? :?

peron

Cara, Primeiro você precisa ter uma classe carro, senão nao adianta vc percorrer o resulset e não guardar os dados em lugar nenhum, como vc comentou aquelas linhas.

O con, é sua Conexão com o banco de dados… no exemplo abaixo eu botei ele em BDCarro, mas não deveria estar ali! BDCarro deveria ter uma referencia a sua conexao, que deve ficar armazenada em outra classe, e instanciada uma vez no seu sistema.

Como está no exemplo abaixo, cada vez q vc cria BDCarro ele cria uma nova conexão, má pratica essa.

então:

Carro.java

public class Carro {
    private String placa;
    private String marca;
    private String modelo;
    private Float taxaDiaria;

    public String getMarca() {
        return marca;
    }

    public void setMarca(String marca) {
        this.marca = marca;
    }

    public String getModelo() {
        return modelo;
    }

    public void setModelo(String modelo) {
        this.modelo = modelo;
    }

    public String getPlaca() {
        return placa;
    }

    public void setPlaca(String placa) {
        this.placa = placa;
    }

    public Float getTaxaDiaria() {
        return taxaDiaria;
    }

    public void setTaxaDiaria(Float taxaDiaria) {
        this.taxaDiaria = taxaDiaria;
    }
}

aí vc tem um DAOCarro que ali vc bota todas as consultas ao BD:

DAOCarro.java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class DAOCarro {
    final static String driverClass    = "org.gjt.mm.mysql.Driver";
    final static String connectionURL  = "jdbc:mysql://localhost/<dbname>?user=<username>&password=<password>";
    final static String userID         = "scott";
    final static String userPassword   = "tiger";
    Connection   con                   = null;


    /**
     * Construct a QueryExample object. This constructor will create an Oracle
     * database connection.
     */
    public DAOCarro() {
        try {
            System.out.print("  Loading JDBC Driver  -> " + driverClass + "\n");
            Class.forName(driverClass).newInstance();

            System.out.print("  Connecting to        -> " + connectionURL + "\n");
            this.con = DriverManager.getConnection(connectionURL, userID, userPassword);
            System.out.print("  Connected as         -> " + userID + "\n");

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }


    public List<Carro> listaNaoLocados() {
        List<Carro> carros = new ArrayList<Carro>();
        String sql;
        try {
            Statement st = con.createStatement();
            sql = "Select * from carro where locado = 0";
            ResultSet rs = st.executeQuery(sql);

            while (rs.next()) {
                Carro c = new Carro();
                c.setPlaca(rs.getString(1));
                c.setMarca(rs.getString(2));
                c.setModelo(rs.getString(3));
                c.setTaxaDiaria(rs.getFloat(4));
                carros.add(c);
            }
            rs.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return carros;
    }
}

e para usar:

CarroMain.java

import java.util.List;

public class CarroMain {

    public static void main(String []args) {
        DAOCarro dc = new DAOCarro();
        
        List<Carro> cars = dc.listaNaoLocados();
        
        for (Carro car: cars) { 
            //imprime os dados
            System.out.println(car.getMarca());
        }
    }
    
}

Espero ter ajudado.

sds

Criado 19 de outubro de 2007
Ultima resposta 26 de out. de 2007
Respostas 21
Participantes 7