Conexão com o Banco [Não resolvido]

Ao tentar inserir dados no banco de dados, é lançada a seguinte excessão:

[quote]java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Parâmetros insuficientes. Eram esperados 1.
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3110)
at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338)
at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:253)
at sistemadohotel.Banco.consulta(Banco.java:59)
at sistemadohotel.GerenciadorDeQuartos.cadastraQuartos(GerenciadorDeQuartos.java:27)
at sistemadohotel.Main.main(Main.java:51)
[/quote]

O meu banco tem 3 tabelas:

Quarto(NumeroDoQuarto:Texto,QuantidadeDeCamas:inteiro,Capacidade:Numero,Status:boolean)
Hospede(idHospede:Texto,NomeDoHospede:Texto);
Hospedagem(idCadastro:Texto,NumeroDoQuarto:Texto,idHospede:Texto,dataDeEntrada:Data,DataDeSaida:Data)

Minha intrução de Inserção:

INSERT INTO QUARTO VALUES("+quarto.getNumeroDoQuarto()+","+quarto.getQuantidadeDeCamas()+","+quarto.getCapacidade()+","+quarto.isStatus()+");"

Minha classe quarto:

[code]
public class Quarto {

private String numeroDoQuarto;
private int quantidadeDeCamas;
private int capacidade;
private boolean status;

/** Creates a new instance of Quarto */
public Quarto(String numeroDoQuarto, int quantidadeDeCamas,int capacidade) {
    this.setNumeroDoQuarto(numeroDoQuarto);
    this.setQuantidadeDeCamas(quantidadeDeCamas);
    this.setCapacidade(capacidade);
    this.setStatus(true);
}

public void alteraDadosDoQuarto(Quarto quarto){
    this.setNumeroDoQuarto(quarto.getNumeroDoQuarto());
    this.setQuantidadeDeCamas(quarto.getQuantidadeDeCamas());
    this.setCapacidade(quarto.getCapacidade());
}

public boolean possuiVaga(){
    return (this.getCapacidade() &gt 0)?true:false;
}

public void adicionaHospede(Hospede hospede){
    
    setCapacidade(getCapacidade()-1);
}

public void removeHospede(Hospede hospede){
    
    setCapacidade(getCapacidade()+1);
}

public String getNumeroDoQuarto() {
    return numeroDoQuarto;
}

public void setNumeroDoQuarto(String numeroDoQuarto) {
    this.numeroDoQuarto = numeroDoQuarto;
}

public int getQuantidadeDeCamas() {
    return quantidadeDeCamas;
}

public void setQuantidadeDeCamas(int quantidadeDeCamas) {
    this.quantidadeDeCamas = quantidadeDeCamas;
}

public int getCapacidade() {
    return capacidade;
}

public void setCapacidade(int vagas) {
    this.capacidade = vagas;
}   

public boolean isStatus() {
    return status;
}

public void setStatus(boolean status) {
    this.status = status;
}

}[/code]

OBS: Os dados não são inseridos no banco.

 INSERT INTO QUARTO VALUES("+quarto.getNumeroDoQuarto()+","+quarto.getQuantidadeDeCamas()+","+quarto.getCapacidade()+","+quarto.isStatus()+");"

Jogue fora isso e utilize PreparedStatement:
Sobre PreparedStatement


pstmt = Connection.prepareStatement("INSERT INTO QUARTO VALUES(?,?,?)");
pstmt.clearParameters();
pstmt.setString(1, objeto1);
pstmt.setLong(2, objeto2);
pstmt.executeUpdate();

Qnto erro verifique se vc passou a qtde parametros corretos

Tem algum erro nos parâmetros…

Pode ser a falta de aspas ou algo assim…

Geralmente a gente resolve este problema com PreparedStatements…

dá uma pesquisada sobre eles, deixam o código bem mais limpo também…

  1. não me lembro do Access aceitar o formato de sql
insert into tabela values (valor1, valor2)

que eu me lembre tem que ser:

insert into tabela (campo1, campo2) values (valor1, valor2)
  1. verifique, se o access aceitar a forma de sql que você descreveu, se os campos estão na ordem correta que aparecem na tabela;
  2. Porque raios usar o Access??? Pior impossível para mandar para clientes, para performance,… Tanto banco bom de graça (MySQL para servidor, HSQLDB para embarcado,…)

abraços,

otávio

PS: reitero o que disseram acima, use o PreparedStatement

[quote=otaviofcs]1) não me lembro do Access aceitar o formato de sql

  1. Porque raios usar o Access??? Pior impossível para mandar para clientes, para performance,… Tanto banco bom de graça (MySQL para servidor, HSQLDB para embarcado,…)
    [/quote]

Voce teria uma melhor solução para que eu substitua o Acces?
se sim, qual banco utilizar?

[quote] Voce teria uma melhor solução para que eu substitua o Acces?
se sim, qual banco utilizar?[/quote]

Veja bem, access não é um banco de todo ruim. Ele tem os wizards para construir consultas e mascara algumas coisas para você para tornar sua vida mais fácil. Por outro lado ele:

  1. tem uma performance patética;
  2. na rede nem se fala;
  3. access com java ainda tem que usar mais uma camada que é o odbc.

Veja o que eu disse no item 3:

Agora, depende da sua necessidade, do seu produto…

abraços,

Otávio