Erro de sintaxe MySQL [Resolvido]

Ola pessoal,

alguém poderia me ajudar com esse erro:

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘(1,‘Ativo’,‘0’,Ativo)’ at line 1[SQL: 1064, 42000]

Comando MySQL:

public int incluirConta(Conta a) throws Exception {

    // retorna 0 => erro na inclusão
    // 1 => incluiu
    // 2 => nome cadastrado

    int retorno = 0;
    String sql = null;
    Connection conn = this.conexao.abreConexaoBD();
    Statement st = conn.createStatement();

    sql = "insert into conta (codEstendido, descricao, saldo, tipo";
    sql += "values (";
    sql += a.getCodEstendido() + ",";
    sql += "'" + a.getDescricao() + "',";
    sql += "'" + a.getSaldo() + "',";
    sql += a.getTipo() + ")";

    int qRs = st.executeUpdate(sql);

    if (qRs == 0) {
      retorno = 0;

    } else {
      retorno = 1;
    }

    st.close();
    conn.close();
    return retorno;
  }

Eu passei pelo debug, ate a linha 19 a aplicação rodo certinha, mas depois deu esse erro
acho que esse int qRs que esta dando erro, mas não sei o que fazer
alguém poderia me ajudar?

Use um StringBuffer para concatenar essas Strings.
Depois, de um System.out.println() na sua String Query para mostrar o resultado dela. Deve ter vírgula e/ou aspas sobrando ai.

Permita-me lhe dar a seguinte sugestão:

Ao invés de concatenar, tente fazer assim:

sql = "insert into conta(codEstendido, descricao, saldo, tipo) values (?, ?, ?, ?)";
st = conn.prepareStatement(sql);
st.setString(1, a.getCodEstendido());
st.setString(2, a.getDescricao());
st.setString(3, a.getSaldo());
st.setString(4, a.getTipo));
qRs = st.executeUpdate(sql);

Torna seu código muito mais legivel e você não precisa se preoculpar com as aspas.

Quanto ao erro, pode ser que o campo saldo não seja varchar mas sim int (no banco de dados).

[quote=ulysses] Ola pessoal,

alguém poderia me ajudar com esse erro:

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘(1,‘Ativo’,‘0’,Ativo)’ at line 1[SQL: 1064, 42000]

Comando MySQL:

public int incluirConta(Conta a) throws Exception {

    // retorna 0 => erro na inclusão
    // 1 => incluiu
    // 2 => nome cadastrado

    int retorno = 0;
    String sql = null;
    Connection conn = this.conexao.abreConexaoBD();
    Statement st = conn.createStatement();

    sql = "insert into conta (codEstendido, descricao, saldo, tipo";
    sql += "values (";
    sql += a.getCodEstendido() + ",";
    sql += "'" + a.getDescricao() + "',";
    sql += "'" + a.getSaldo() + "',";
    sql += a.getTipo() + ")";

    int qRs = st.executeUpdate(sql);

    if (qRs == 0) {
      retorno = 0;

    } else {
      retorno = 1;
    }

    st.close();
    conn.close();
    return retorno;
  }

Eu passei pelo debug, ate a linha 19 a aplicação rodo certinha, mas depois deu esse erro
acho que esse int qRs que esta dando erro, mas não sei o que fazer
alguém poderia me ajudar?[/quote]

Você esqueceu de fechar o ) depois do tipo, e ainda colocou o values junto com o tipo, veja:

sql = "insert into conta (codEstendido, descricao, saldo, tipo";
    sql += "values (";

Se vc imprimir esse insert, ele vai sair assim:

insert into conta (codEstendido, descricao, saldo, tipovalues (

Abraços.

Fica com DEUS.

[quote=Fexx][quote=ulysses] Ola pessoal,

alguém poderia me ajudar com esse erro:

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘(1,‘Ativo’,‘0’,Ativo)’ at line 1[SQL: 1064, 42000]

Comando MySQL:

public int incluirConta(Conta a) throws Exception {

    // retorna 0 => erro na inclusão
    // 1 => incluiu
    // 2 => nome cadastrado

    int retorno = 0;
    String sql = null;
    Connection conn = this.conexao.abreConexaoBD();
    Statement st = conn.createStatement();

    sql = "insert into conta (codEstendido, descricao, saldo, tipo";
    sql += "values (";
    sql += a.getCodEstendido() + ",";
    sql += "'" + a.getDescricao() + "',";
    sql += "'" + a.getSaldo() + "',";
    sql += a.getTipo() + ")";

    int qRs = st.executeUpdate(sql);

    if (qRs == 0) {
      retorno = 0;

    } else {
      retorno = 1;
    }

    st.close();
    conn.close();
    return retorno;
  }

Eu passei pelo debug, ate a linha 19 a aplicação rodo certinha, mas depois deu esse erro
acho que esse int qRs que esta dando erro, mas não sei o que fazer
alguém poderia me ajudar?[/quote]

Você esqueceu de fechar o ) depois do tipo, e ainda colocou o values junto com o tipo, veja:

sql = "insert into conta (codEstendido, descricao, saldo, tipo";
    sql += "values (";

Se vc imprimir esse insert, ele vai sair assim:

insert into conta (codEstendido, descricao, saldo, tipovalues (

Abraços.

Fica com DEUS.[/quote]

Isso ai mesmo, mais um motivo para você ficar longe de concatenações :smiley:

Fexx muito obrigado é isso mesmo :smiley:

nem percebi que tinha esquecido de fecha o parêntese.

[quote=nel]Use um StringBuffer para concatenar essas Strings.
Depois, de um System.out.println() na sua String Query para mostrar o resultado dela. Deve ter vírgula e/ou aspas sobrando ai.[/quote]
Prefira StringBuilder, pois o StringBuffer já está com muita coisa depreciada.

Embora a query seja pequena, seria muito mais fácil ter identificado o erro utilizando um objeto de uma das duas classes acima, pois a sintaxe seria algo como

StringBuilder query = new StringBuilder();
query.append("INSERT ");
query.append("INTO ");
query.append("conta ");
query.append("(col1, col2, col3, colN) ");
query.append("VALUES ");
query.append("(?, ?, ?, ?) ");

Ou, se insistir em usar Statement ao invés de PreparedStatement

StringBuilder query = new StringBuilder();
query.append("INSERT ");
query.append("INTO ");
query.append("conta ");
query.append("(col1, col2, col3, colN) ");
query.append("VALUES ");
query.append("(");
query.append(valor1);
query.append(", ");
query.append(valor2);
query.append(", ");
query.append(valor3);
query.append(", ");
query.append(valorN);
query.append(")");