Método para não Truncar banco com: "" , '' e etc

Fala ai pessoal, alguem sabe de um método que evite truncar o banco quando se salva caracteres como :" " ou ’ ’ e etc , e evitar que o usuário possa fazer uma M gigante?

Cara, nossa! Só eu não entendi?

O que é uma M gigante? EDIT: AH!! uma M#$%@!!!

Assim… por ex:

if (pessoa.getNome().trim().length() > 0) //gravar else //por favor digite algo seu animal!

O membro trim(), remove os espaços em branco da esquerda e da direita.

Colocando escape characters antes?

Até!

[quote=peerless]Cara, nossa! Só eu não entendi?

O que é um M gigante? [/quote]
Bom, é pq eu pego os dados de uma tela swing, e com eles monto minha query e faço o insert no banco.
Se o usuário por exemplo em textarea colocar por exemplo :aaaa’ lalalaal ‘, na minha query vai ficar assim: ‘aaaa’lalala’’ e vai crashar minha base.
Tem algum método que deixe passar esses caracteres sem que interfiram no comando sql ?

Use PreparedStatement, que essa proteção contra aspas perdidas (mais conhecida como SQL Injection) já é feita pelo driver JDBC. É claro que a string não é para ser concatenada, e sim passada como parâmetro.

[quote=thingol]Use PreparedStatement, que essa proteção contra aspas perdidas (mais conhecida como SQL Injection) já é feita pelo driver JDBC. É claro que a string não é para ser concatenada, e sim passada como parâmetro.

[/quote]
Eu estou usando o preparedStatement.
Mas o que você quer dizer sobre a String não é p/ ser concatenada e sim passada com parametro?
Obrigado desde já.

Segue meu SQLinsert:

 String sqlInsert= ("insert into TAXAS(stanvisa,stzerada,stdesratizacao,stfunapol,stfunmov,stfarol,stpsc,nmnavio,nmlocal," +
                           "dtanvisa,dtzerada,dtdesratizacao,dtfunapol,dtfunmov,dtfarol,dtpsc,dteta,comentario) " +
                           "values ('"+n.getStanvisa()+"','"+n.getStzerada()+"','"+ n.getStdesratizacao() +"','"+n.getStfunapol()
                          +"','"+n.getStfunmov()+ "','" +n.getStfarol() + "','"   +n.getStpsc() +"','"+ n.getNome()+"','"+ n.getLocal() 
                          +"',"+anvisa+ "," +zerada+ "," +desratizacao  +","+funapol
                          +","+funmov+ "," +farol + ","   +psc           + ","+ eta + ",'"  +n.getComentario()+"');");   
        
        
        java.sql.PreparedStatement prpst = con.prepareStatement(sqlInsert);

Onde as variaveis anvisa,zerada(e etc …) vem do o objeto N e são tratadas e os n.get…() vem do objeto direto.

http://www.guj.com.br/posts/list/82395.java

Dê uma estudada melhor em preapredStatement, você pode usar melhor os recursos dele ao invés de concatenar tanto as Strings:

http://www.guj.com.br/java.tutorial.artigo.115.1.guj

Isto aqui:

 String sqlInsert= "insert into TAXAS(stanvisa,stzerada,stdesratizacao,stfunapol,stfunmov,stfarol,stpsc,nmnavio,nmlocal," +
                           "dtanvisa,dtzerada,dtdesratizacao,dtfunapol,dtfunmov,dtfarol,dtpsc,dteta,comentario) " +
                           "values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'";
        java.sql.PreparedStatement prpst = con.prepareStatement(sqlInsert);
prpst.setString (1, n.getStanvisa());
....
prpst.setString (18, n.getComentario());

Dica: se você passar uma string SQL muito grande e montada (como você fez) para um PreparedStatement, não só NÃO ajuda como pode dar problemas com alguns bancos (acho que o DB2 é assim), que fazem cache de strings SQL preparadas.

[quote=thingol]Isto aqui:

 String sqlInsert= "insert into TAXAS(stanvisa,stzerada,stdesratizacao,stfunapol,stfunmov,stfarol,stpsc,nmnavio,nmlocal," +
                           "dtanvisa,dtzerada,dtdesratizacao,dtfunapol,dtfunmov,dtfarol,dtpsc,dteta,comentario) " +
                           "values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'";
        java.sql.PreparedStatement prpst = con.prepareStatement(sqlInsert);
prpst.setString (1, n.getStanvisa());
....
prpst.setString (18, n.getComentario());

Dica: se você passar uma string SQL muito grande e montada (como você fez) para um PreparedStatement, não só NÃO ajuda como pode dar problemas com alguns bancos (acho que o DB2 é assim), que fazem cache de strings SQL preparadas.
[/quote]

Mto obrigado Thingol, vlw mesmo pela força.
E obrigado a todos que me deram ajuda também.
Vou estudar mais sobre o PreparedStatment, até então p/ mim usar somente o Statement ou preparedStatement era a mesma coisa.Nunca tinha fuçado os métodos de cada um.

Mto obrigado galera !!!

Éh cara, estuda JDBC por estar apenas ciênte da api, pois produtividade com isso, não rola!!!

Ai tu já pode olhar sobre frameworks ORm´s. o hibernate por ex…

Pessoal, agora tem dado um erro bem estranho:
com.mysql.jdbc.exceptions.jdbc4.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 ‘?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)’ at line 1

Minhas query mandei imprimir e tá certinha:

insert into TAXAS(stanvisa,stzerada,stdesratizacao,stfunapol,stfunmov,stfarol,stpsc,nmnavio,nmlocal,dtanvisa,dtzerada,dtdesratizacao,dtfunapol,dtfunmov,dtfarol,dtpsc,dteta,comentario) values (‘N/A’,‘N/A’,‘N/A’,‘N/A’,‘N/A’,‘N/A’,‘N/A’,‘XPTO’,‘XPTO 2’,‘2008-02-23’,‘2008-02-23’,‘2008-02-23’,‘2008-02-23’,‘2008-02-23’,‘2008-02-23’,‘2008-02-23’,‘2008-02-23’,‘Teste 01’)

O que pode ser ? Já fucei tudo.

É óbvio que não testei minha correção. Vou mostrar bem grande onde é que eu errei.
[size=24] ?,?,?)’";[/size]

Como você deve ter visto, aqui há uma aspa que não deveria estar nessa string, já que ela não tem mais parâmetros do tipo string.

Deveria ser algo como:

Dica: Quando incluir aspas simples em strings, acostume-se a pôr um “” antes delas, embora isso não seja necessário.
Ou seja: “João Sant’Anna”, não “João Sant’Anna”.

É que isso ajuda a fazer com que você evite o uso de aspas simples em strings - normalmente você só usa para montar strings SQL, e como sabemos montar string SQL é muito, muito bom - para os caras que querem fritar com sua base, bem entendido.

Coloca o trecho de código exatamente como ele está.

Acho que deve ter algum no lugar errado.

BOm meu camarada, eu já havia reparado antes neste seu erro, e já foi concertado logo qdo coloquei no meu código,
está da seguitne maneira:
“insert into TAXAS(stanvisa,stzerada,stdesratizacao,stfunapol,stfunmov,stfarol,stpsc,nmnavio,nmlocal,” +
"dtanvisa,dtzerada,dtdesratizacao,dtfunapol,dtfunmov,dtfarol,dtpsc,dteta,comentario) " +
“values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)”.

[quote=Ssalgado]Coloca o trecho de código exatamente como ele está.

Acho que deve ter algum no lugar errado.[/quote]

###  com.mysql.jdbc.JDBC4PreparedStatement@1b09468: insert into TAXAS(stanvisa,stzerada,stdesratizacao,stfunapol,stfunmov,stfarol,stpsc,nmnavio,nmlocal,dtanvisa,dtzerada,dtdesratizacao,dtfunapol,dtfunmov,dtfarol,dtpsc,dteta,comentario) values ('N/A','N/A','N/A','N/A','N/A','N/A','N/A','XPTO','XPTO 2','2008-02-23','2008-02-23','2008-02-23','2008-02-23','2008-02-23','2008-02-23','2008-02-23','2008-02-23','Teste 01')  ###
com.mysql.jdbc.exceptions.jdbc4.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 '?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)' at line 1

Alinha de cima é um Println() do PreparedStatement já montando.
E a de baixo é o erro.

A Query ta montada certinha.
Eu dei um Println() na query que é montada, copio e colo no Query Browser do Mysql, e ela executa numa boa.
Será que esse Mysql 6.0 Alpha ta bugado ?