[ kath @ 01.02.2010. 20:31 ] @
Zdravo :)
na ovom forumu sam pronasla dosta resenja za probleme koji su me mucili
tokom samog studiranja, i veoma sam zahvalna na pruzenoj pomoci :)
Ono sto me ovog puta muci, nazalost, nisam uspela naci...

Radim za diplomski web aplikaciju za vodjenje poslovnih knjiga.
Koristila sam fakultetsku bazu podataka kojoj sam pristupala preko MySQL-a
koji sam instalirala kuci, verzija 5.0

Problem je nastao kad je na faksu pukla baza, i ja morala da se prebacim na
"kucnu" varijantu.
Instalirala sam prvo Xampp, kasnije i AppServ, ali je greska opstajala.

Kako sam koristila hibernate mappiranje, mislila sam da je greska mozda tu,
ali na hibernate forumu su mi rekli da je moj kod kod njih - prosao...

dakle...

treba mi da se izvrsi:

Code:
package model;

import javax.transaction.Transaction;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateTest {

   /**
    * @param args
    */
   public static void main(String[] args) {
      Configuration cfg = new Configuration();
      cfg.configure("model/hibernate.cfg.xml");
      SessionFactory sf = cfg.buildSessionFactory();
      Session s = sf.openSession();
      
      org.hibernate.Transaction tx = s.beginTransaction();
      Kb48302Sifarnikpisaca pisac = new Kb48302Sifarnikpisaca();
      pisac.setPisciId("13");
      pisac.setPisciIme("Niki");
      pisac.setPisciPrezime("French");
      
      s.save(pisac);
      tx.commit();

   }

}


greska koju dobijam je:

Code:

Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
   at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
   at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
   at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
   at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
   at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
   at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
   at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
   at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
   at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
   at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
   at model.HibernateTest.main(HibernateTest.java:27)
Caused by: java.sql.BatchUpdateException: 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 '-02.kb48302_sifarnikpisaca (PISCI_IME, PISCI_PREZIME, PISCI_ID) values ('Niki', ' at line 1
   at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1666)
   at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1082)
   at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
   at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
   ... 8 more



moja klasa Kb48302Sifarnikpisaca ima tri atributa samo,
Code:
private String pisciId;
   private String pisciIme;
   private String pisciPrezime;


sa get i set metodama...

Molim za pomoc... vec danima me ovo muci :(
imam eventualno jos da prilozim hibernet mapiranje, ali rekli su da hibernet prolazi... bice da sam zabrljala negde izmedju...

Hvala unapred.
Kath
[ bogdan.kecman @ 03.02.2010. 12:10 ] @
kako definises konekciju prema mysql-u? koristis propertie u pool-u ili koristis url? koja verzija appservera? koja verzija mysql connectora? da li ti je mysql connector jar stavljen sa aplikacijom ili u lib od appservera?

- skini poslednji connector/j
- stavi ga u lib na appserveru, ne uz aplikaciju
- budi sigurna da si u konektoru prema mysql-u (dal kroz url ili kroz propertie) UGASILA server side prepared statements !! (ovo je najbitnije, useServerPreparedStmts=false )

to bi trebalo da pomogne glupom hibernate-u da konstruise upit kako treba ... posto je tu trenutno zabod - hibernate ti konstruise upit koji nije validan (sintaksno)

sto se greske (sintaksne) tice .. ono sto je zbunjujuce je

Citat:
-02.kb48302_sifarnikpisaca


ovo znaci da ti se baza zove "-02" !! .. to moz da prodje samo ako je ime baze pod backtikovima ... dakle `-02` a i tada nisam siguran da li zelis da ti se baza zove -02 .. promeni ime baze u nesto "normalno" tipa BAZA02 (bez minusa, razmaka, kljucnih reci) i to ce mozda 1/1 da ti resi problem bez menjenja bilo cega drugog

[ kath @ 03.02.2010. 23:37 ] @
znaci - ne verujem.
5 dana zurenja u kod, i da, vidim to -02 i ne znam ni sta mi je ni odakle mi je...

i maltretiram koleginicu sad,
i shvatam...

nije mi ni palo na pamet da je -02 ime baze...
jer meni je baza diplomski483-02, pri cemu je on prvi deo zanemario...

skacem do plafona od srece :) to je to... zanemario je prvi deo imena baze.
Ne znam zastoje to uradio, ali bar znam gde je problem... i napokon mogu dalje :)

[ bogdan.kecman @ 04.02.2010. 13:25 ] @
Citat:
kath
Ne znam zastoje to uradio, ali bar znam gde je problem... i napokon mogu dalje :)


iz nekog razloga hibernate ne stavi backtick oko imena tabele a - kao i mnogi drugi karakteri ne moze validno da bude deo imena baze/tabele/kolone. Jedini nacin da koristis - je da ime onda ogradis sa backtickovima tako da bude `nesto-nestodrugo` inace ne moze posto je - aritmeticka operacija i kako parser da zna da li je a-b jedan atribut koji se zove `a-b` ili je to aritmeticki izraz `a`-`b`.
[ kath @ 05.02.2010. 00:52 ] @
hvala i za ovu informaciju :)
vodicu racuna o tome, mada sam to vec uveliko trebala da usvojim...