Estou passando o nome do Campo e da Tabela corretamente !!!
Só que ta dando uma exceção SQLException…o getMessage() diz o seguinte:
Syntax error or access violation, message from server: “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 ‘‘FUNCIONARIO’’ at line 1”
Quando eu substituo a String SQL por isso:
st = Conexao.getConexao().prepareStatement(
“Select max(”+Campo+")from " + Tabela) ;
Simples, quando vc seta o nome da tabela via preparedStatement ele inclui as aspas simples, entao da erro de sql.
Tente setar o nome da tabela na query, assim:
String sql = "select max("+campo+") from "+tabela;
...
D
daniloahPJ
vlw Bruno pela explicação…entendi o pq do erro !!!..mas a String sql foi exatamente a que coloquei no forum !! flwz…
J
jaireltonPJ
E porque você está gerando essa chave desse jeito? Não seria mais facil coloca-la como auto-increment e se precisar obter a chave depois de inserir usar o getGeneratedKeys()?
M
mari_carvalhoPJ
Olá daniloah,
Concordo com o jairelton. Seria mais interessante deixar o autoincremento pelo BD e já que vc está usando PreparedStatement recuperar a chave com getGeneratedKeys. Vou postar um exemplo de uso para recuperar a última chave inserida:
Stringatualiza="INSERT INTO tabela (campo1, campo2, campo3) VALUES (?, ?, ?)";PreparedStatementdeclaracao=conexao.prepareStatement(atualiza,Statement.RETURN_GENERATED_KEYS);declaracao.setInt(1,campo1);declaracao.setString(2,campo2);declaracao.setString(3,campo3);declaracao.executeUpdate();ResultSetresultado=declaracao.getGeneratedKeys();resultado.next();intchave=resultado.getInt("campo1");
Sobre o seu código para gerar a chave. Sugiro q imprima sua sql e poste aqui para podermos analisar…
Abraços,
Mari
D
daniloahPJ
É que meu professor de curso Java resolveu não utilizar o auto-incremento do Banco !!! o motivo ? me esqueci !!! mas vou perguntar e depois posto aki !!!
Minha função GeraChave é essa :
publicstaticintgetChave(StringCampo,StringTabela){PreparedStatementst=null;intprimaryKey=100;//começa com 100try{st=Conexao.getConexao().prepareStatement(“Selectmax(”+Campo+")from "+Tabela);
Outra pergunta !!! Nos meus métodos de Classe :Ex: Salvar(),Atualizar(),Deletar()…eu sempre declaro uma variavel local de PreparedStatement pra cada método, como vcs podem ver na função GeraChave, e no bloco finally eu fecho ela com o método close()…Só que eu não sou obrigado a fechar o PreparedStatement , né !!! Como vcs fazem quando usam um preparedStatement ? Vcs fazem como eu faço ? Ou declara um PreparedStatement que vale pra classe toda ?