postgreSQL enjoado!

7 respostas
felipe_thrash

pessoal,

no mySQL... quando dou um insert, e um update é assim:
insert into autenticacao (id,nome,senha,telefone,profissao) VALUES('01','felipe','senha','666','nope');

update autenticacao set nome='felipe2',senha='senha1',telefone='999',profissao='nope' where id=01;
que tratando em java fica assim né:
PreparedStatement stmt = this.connection.prepareStatement("insert into autenticacao(id,nome,senha,telefone,profissao) values (?,?,?,?,?)");

PreparedStatement stmt = this.connection.prepareStatement("update autenticacao set nome=?,senha=?,telefone=?,profissao=? where id=?");

pq no PostgreSQL, ele tem a frescura de no update, ele querer aspas ??

update autenticacao set nome='felipe2',senha='senha1',telefone='999',profissao='nope' where id='01';

e como trato isso na PreparedStatement ?
alguem já passou por isso ? :?

valew

7 Respostas

celso.martins

Amigo, você só precisa de aspas simples se o seu campo for Varchar e Data (Timestamps, Dates, etc). Aspas duplas se o nome do campo tiver letras maiúsculas.

O resto não precisa não.

Para você passar o valor para um parâmetro String (?), basta usar o setString do stmt.

Trabalho com PostgreSQL há quase 4 anos e sempre funcionou dessa forma que to te passando.

Abraços!

P
try{

String sql = "update pessoa set nome=?, endereco=? “;

sql += " where id=?;

Connection conn = ConnectionDB.getConnection();

pStmt = conn.prepareStatement(sql);

pStmt.setString(1, pessoa.getNome());

pStmt.setString(2, pessoa.getEndereco());

pStmt.setInt(3,pessoa.getId());

pStmt.execute();

}

funciona numa boa.

felipe_thrash

meus campos no BD são “character”

parece q é esse tipo de campo… por ai

e o engraçado é que…
rodando a query normal…

update autenticacao set nome='felipe2',senha='senha1',telefone='999',profissao='nope' where id=01;

retorna 0 linha afetada…

e com aspas simples
retorna 1 linha afetada!

mas como trato no código ??
a solução acima não funcionou tb não :cry:

ou simplesmente troco os tipos de campo ?

:roll:

cassio

Não é o postgresql que é enjoado, você que não está prestnado atenção…

... where id=01;

Sem aspas o seu 01 vira 1 pois ele interpreta como integer e não como caractere. Neste caso, zero à esquerda é descartado. Por isso que neste exemplo que vc passou vc é obrigado a colocar aspas simples:

... where id='01';
felipe_thrash

vc é obrigado a colocar aspas simples:

... where id='01';

e como trato isso no prepareStatement ??

this.connection.prepareStatement("update autenticacao set nome=?,senha=?,telefone=?,profissao=? where id='?'"); //desse jeito aki não vai.... =(

perdoem minha ignorância… :frowning:

raci0nal

Não precisa tratar.
Você só precisa saber qual o tipo do campo lá no BD.
Se for inteiro, use:

pStmt.setInt(n,n);

Se for string, use:

pStmt.setString(n, s);

Acho que a confusão está acontecendo pois você está esperando que este campo seja inteiro, quando na verdade ele está como string lá no Postgre, por isso a necessidade das ‘’.

Abraços,
Marcos Antonio Campos Jordão’’

felipe_thrash

então… estou usando setString sim…

mas olha só… meu ID… vou usar tanto nº quanto letras…
tipo um ID = AA014
e estou usando character no banco, e string no código… em TOdos so campos…

quero saber se tem como reformular essa query dentro do código… ???

valew!

Criado 9 de novembro de 2007
Ultima resposta 14 de nov. de 2007
Respostas 7
Participantes 5