Update.... [RESOLVIDO]

20 respostas
ThomasCouto

Olá, eu preciso fazer um update em uma tabela (access) chamada oficina…

Eu não se como fazer para inserir mais de um campo, tentei assim:

String clausula = "update oficina set dataInicio = " + e.getDataInicio() + " set estado = " + e.getEstado() + " where codigo = " + e.getCodigo() + "";

e ele retornou:

java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe (operador faltando) na expressão de consulta '-61997518800000 set estado = Iniciado'.

eu sei que é colocando uma ‘’,’’ (virgula) mas nao sei onde… nao consegui tambem… falou

20 Respostas

wandersonxs
ThomasCouto:
Olá, eu preciso fazer um update em uma tabela (access) chamada oficina..

Eu não se como fazer para inserir mais de um campo, tentei assim:

String clausula = "update oficina set dataInicio = "
                + e.getDataInicio() + " set estado = " + e.getEstado()
                + " where codigo = " + e.getCodigo() + "";

e ele retornou:

java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access]
 Erro de sintaxe (operador faltando) na expressão de consulta '-61997518800000 set estado = Iniciado'.

eu sei que é colocando uma '','' (virgula) mas nao sei onde.. nao consegui tambem... falou

Seu sql está errado....

Set somente na primeira vez....

Update tabela set campo1 = x, campo2 =y where tabela = xxx;

seu código ficaria assim

"update oficina set dataInicio = "
                 + e.getDataInicio() + ", estado = " + e.getEstado()
                 + " where codigo = " + e.getCodigo() + "";

é isso ai

Abraços
Wanderson

ThomasCouto

agora deu isso: java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Parâmetros insuficientes. Eram esperados 1.

o campo dataInicio é long e o outro é String

wandersonxs

posta seu código onde vc tenta fazer o update de registro…

O método desde quando vc abre conexão, resultSet, etc…

Abraços
Wanderson

ThomasCouto

wandersonxs:
posta seu código onde vc tenta fazer o update de registro…

O método desde quando vc abre conexão, resultSet, etc…

Abraços
Wanderson

consegui cara o problema eram essas benditas aspas… ficou assim:

String clausula = "update oficina set " + "dataInicio='" + e.getDataInicio() + "'" + ",estado='" + e.getEstado() + "'" + " WHERE codigo =" + e.getCodigo() + "";

maikonaraujo

Depois muda o teu código para usar PreparedStatement…
estas aspas no teu código podem permitir injeção de sql

Abraço.

ThomasCouto

maikonaraujo:
Depois muda o teu código para usar PreparedStatement…
estas aspas no teu código podem permitir injeção de sql

Abraço.

opa, ja estou usando ! Valeu

ThomasCouto

affffffffff agora estou com problema nessa clausula:

String clausula = "UPDATE oficina set " + "descricaoPecas='" + e.getDescricaoPecas() + "'" + ",descricaoServicos='" + e.getDescricaoServico() + "'" + ",dataPrevista='" + e.getDataPrevista() + "'" + ",valorPecas='" + e.getValorPecas() + "'" + ",valorServicos='" + e.getValorServicos() + "'" + ",qtdItens='" + e.getQuantidadeItens() + "'" + ",qtsPecas='" + e.getQuantidadePecas() + "'" + " WHERE codigo =" + e.getCodigo() + "";

java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Parâmetros insuficientes. Eram esperados 1. at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958) at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115) at sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3150) . . . .

maikonaraujo

Será que o getCodigo naum está retornando null...
sobre injeção de sql, eu tava falando em usar

UPDATE oficina set " + "descricaoPecas= ? "
                 + ",descricaoServicos= ? "
                 + ",dataPrevista= ? "
                 + ",valorPecas= ? "
                 + ",valorServicos=? "
                 + ",qtdItens= ? "
                 + ",qtsPecas= ? "
                 + " WHERE codigo = ? ";

e depois vai setando os objetos ...
[code]setString, setInt, ... setObject... etc[quote]

ThomasCouto

maikonaraujo:
Será que o getCodigo naum está retornando null…
sobre injeção de sql, eu tava falando em usar

UPDATE oficina set " + "descricaoPecas= ? " + ",descricaoServicos= ? " + ",dataPrevista= ? " + ",valorPecas= ? " + ",valorServicos=? " + ",qtdItens= ? " + ",qtsPecas= ? " + " WHERE codigo = ? ";

e depois vai setando os objetos …

setString, setInt, ... setObject...  etc

seguinte eu vi aqui que, o problema ocorre quando vou adicionar qtsItens e qtdPecas… sem esses 2 funciona normal a clausula, os 2 são double

bom eu sou iniciante… é assim que se faz?

String clausula = "UPDATE oficina set " + "descricaoPecas= ? " + ",descricaoServicos= ? " + ",dataPrevista= ? " + ",valorPecas= ? " + ",valorServicos=? " + ",qtdItens= ? " + ",qtsPecas= ? " + " WHERE codigo = ? ";

aí depois…

pstmt.setString(1, bla bla bla);
            pstmt.setString(1, bla bla bla);
            pstmt.setString(1, bla bla bla);
            .
            .
           pstmt.setString(n, bla bla bla);
maikonaraujo

se seu objeto for Double usa setDouble … se for string usa setString… e assim por diante. Ai vc naum tem que se preocupar com aspas e nada disto.

E tbm evita erros do tipo que o usuário tenta detonar seu sistema pondo no seu textBox textos como este:

qqcoisa´ ; Drop suaDatabase ; --
Fabricio_Cozer_Marti

Thomas, o uso do PreparedStatement seria assim.

verifique os imports e as excecoes que cada método pode lançar.

String sql = "update oficina set dataInicio ? , estado = ? where codigo = ? ";

PreparedStatement pStm = con.prepareStatement(sql);

pStm .setDate(1, e.getDataInicio() );
pStm .setString(2, e.getEstado() );
pStm .setInt(3, e.getCodigo());

pStm.executeUpdate(); //retorna um int , representando o numero de registros afetados

lembrando que con é o seu objeto Connection …

ThomasCouto

Fabrício Cozer Martins:
Thomas, o uso do PreparedStatement seria assim.

verifique os imports e as excecoes que cada método pode lançar.

String sql = "update oficina set dataInicio ? , estado = ? where codigo = ? ";

PreparedStatement pStm = con.prepareStatement(sql);

pStm .setDate(1, e.getDataInicio() );
pStm .setString(2, e.getEstado() );
pStm .setInt(3, e.getCodigo());

pStm.executeUpdate(); //retorna um int , representando o numero de registros afetados

lembrando que con é o seu objeto Connection …

java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access]Recurso opcional não implementado
maikonaraujo
String sql = "update oficina set dataInicio = ? , estado = ? where codigo = ? ";

faltou um igual…

ThomasCouto

maikonaraujo:
String sql = "update oficina set dataInicio = ? , estado = ? where codigo = ? ";

faltou um igual…

RAPAZ QUE COISA ENTEDIANTE

java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access]Campo COUNT incorreto
Fabricio_Cozer_Marti

oups… hehe foi mesmo … tem um igual depois do dataInicio

ThomasCouto

desisto, não estou usando nenhuma utilização de COUNT meu código de inserção é esse que voces viram… nao existe nada relacionado a COUNT

java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access]Campo COUNT incorreto

maikonaraujo

Olha se isto pode te ajudar:
http://www.portaljava.com/home/modules.php?name=Forums&file=viewtopic&t=4641

ThomasCouto

Muito obrigado pela atenção de todos

maikonaraujo

Posta ai qual era o real problema…

ThomasCouto

Usei a sujestão que tu me deste… Porem tive que trocar para Statement :confused: (antes estava prepared)

Criado 14 de maio de 2005
Ultima resposta 15 de mai. de 2005
Respostas 20
Participantes 4