Oracle JDBC - chyba ORA-00911: invalid character

Polak Michal Michal.Polak na turboconsult.cz
Čtvrtek Leden 17 08:48:51 CET 2013


Ø  P.S.: Ačkoliv to není z mého dotazu zřejmé, mid je v databázi reprezentovaný jako NVARCHAR, proto ty apostrofy kolem hodnoty.

V kódu byste se o apostrofy neměl starat vůbec.
Nenapsal jste, jakého typu a jakým způsobem plníte "query". Je zapotřebí vždy s dotazem posílat celou relevantní část kódu…..
Předjímám, že to konstruujete nějak takto: String query = "select …. WHERE mid = '" + aValue + "';";

Pokud ano, pak si nastudujte pojem "SQL injection".
(Nápověda: Když v "aValue" bude obsah políčka formuláře které plní uživatel, co se stane, když tam vtipálek napíše: 123';DROP TABLE pfa_audit'

Správné řešení je (zhruba):

String sql = "select …. WHERE mid = ?";
PreparedStatement stm = connection. prepareStatement(sql);
stm.setLong(1 /*sloupce od 1 :-/ */, aValue);



> StringBuffer queryS = new StringBuffer();
queryS.append("select a from pfa_audit a where a.mid = :value ");
Query query = entityManager.createQuery(queryS.toString());
query.setParameter("value", valueint);
return query.getResultList();


Ø  Mozem sa opatrne opytat, k comu je ten StringBuffer?

V tomto kódu samozřejmě k ničemu. Možná to někdo vykopíroval z existujícího kódu a necitlivě to pokrátil.

Dále tam v odpovědi ani nebylo zmíněno, že se jedná o Hibernate, natož aby tam byl odkaz aspoň na dokumentaci nebo tutoriál.

Pokud ale původní tazatel evidentně použil JDBC, pak takováto odpověď je IMHO mimo mísu.

Michal Polák
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://amaio.cz/pipermail/konference/attachments/20130117/1948415e/attachment.html>


Další informace o konferenci Konference