Konuyu görüntüle
IUCODERS FORUM > Programlama > JAVA > Could Not Execute Batch Query
Yazar
iemre


avatar
Anadolu
Kayıt: 26.05.2007
20.07.2009-14:26 #62626
Hibernate kullanarak projemde saveOrUpdate işlemi yapmaya çalışıyorum ama bana garip bir şekilde nedenini çözemediğim şu hatayı veriyor.3 gündür uğraşıyorum bi sonuca varamadım.StackTrace i buraya koyuyorum bi fikri olan varsa yardımcı olursa çok sevineceğim.

2009-07-20 14:13:04,687 ERROR [http-8080-1] JDBCExceptionReporter.logExceptions - 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 'usage='free', username='catir', version=0, visited=6211, website=null, weight=0,' at line 1
2009-07-20 14:13:04,703 ERROR [http-8080-1] AbstractFlushingEventListener.performExecutions - Could not synchronize database state with session
org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:237)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
	at org.springframework.orm.hibernate3.HibernateTemplate$27.doInHibernate(HibernateTemplate.java:811)
	at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:372)
	at org.springframework.orm.hibernate3.HibernateTemplate.flush(HibernateTemplate.java:809)
	at tr.com.cepdunyasi.wc.dao.UserDAOSql.saveUser(UserDAOSql.java:89)
	at tr.com.cepdunyasi.wc.web.controller.LoginInterceptor.autoLogin(LoginInterceptor.java:115)
	at tr.com.cepdunyasi.wc.web.controller.LoginInterceptor.preHandle(LoginInterceptor.java:77)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:847)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:792)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:475)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:430)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
	at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:323)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.appfuse.webapp.filter.LocaleFilter.doFilterInternal(LocaleFilter.java:74)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
	at java.lang.Thread.run(Unknown Source)
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 'usage='free', username='catir', version=0, visited=6211, website=null, weight=0,' at line 1
	at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1693)
	at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1108)
	at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
	at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
	... 48 more






More than one
Yazar
blackout


avatar

Kayıt: 11.12.2008
20.07.2009-16:04 #62628
 
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 'usage='free', username='catir', version=0, visited=6211, website=null, weight=0,' at line 1

SQL sorgusunda syntax hatası olduğu burada belirtilmiş zaten. Hatada belirtilen sorgu parçasından hemen öncesine bakarsan hatayı görebilirsin. SQL sorgusu için trace yapmanı öneriyorum.





Yazar
codehunter


avatar
uzayin derinliklerin
Kayıt: 14.11.2006
20.07.2009-16:07 #62629
hibernate.cfg den show_sql ayarını true yapıp çalıştırdığın sql i görmen çözümü bulmanda yardımcı
olacaktır.
Foreign key lerden birinin null olmasindan kaynaklaniyordur muhtemelen.





Yazar
iemre


avatar
Anadolu
Kayıt: 26.05.2007
20.07.2009-16:34 #62631
Sql sorgumu inceledim daha öncede herhangi bir sorun yok.Hem sorguyu ben kendim yazmıyorum hibernate otomatik olarak generate ediyor.O yüzden sorguda hata olma olasılığı yok.Aslında tam olarak şurda hata veriyor.

public User saveUser(User user) {
		try {
			getHibernateTemplate().saveOrUpdate(user);
			getHibernateTemplate().flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return user;
	}


Burdaki flus metodu database ile senkronize olamıyor sanırım.Bunun sebebini bulamıyorum.





More than one
Yazar
orhan


avatar
istanbul
admin
Kayıt: 17.11.2005
20.07.2009-16:35 #62632
hata gayet açık. update sorgun problemli.






N/A
Yazar
iemre


avatar
Anadolu
Kayıt: 26.05.2007
20.07.2009-16:59 #62633
Bir tek burası problemli değil.Herhangi bir sorguyla update çalıştırmaya çalışsam hata alıyorum bu flus ın yüzünden.Sorgumda hata falan yoktur.





More than one
Yazar
blackout


avatar

Kayıt: 11.12.2008
20.07.2009-17:18 #62634
iemre yazdi
 
Bir tek burası problemli değil.Herhangi bir sorguyla update çalıştırmaya çalışsam hata alıyorum bu flus ın yüzünden.Sorgumda hata falan yoktur.

Sorguda hata olmadıktan sonra MySQL yorumlayıcısı neden "You have an error in your SQL syntax" desin?
Sorgunun execute edilmeden önceki en son halini trace edip buraya yazabilir misin?





Yazar
iemre


avatar
Anadolu
Kayıt: 26.05.2007
20.07.2009-17:26 #62635
İşte abicim hibernate in kendi başına oluşturduğu update sorgularından bitanesi buna benziyor.


update wapchat.chat_user set account_enabled=?, account_locked=?, ban_end_date=?, ban_start_date=?, birthdate=?, cancel_date=?, channel=?, charge_amount=?, charge_count=?, city=?, city_name=?, client_agent=?, country=?, debit=?, email=?, eye_color=?, first_name=?, grade=?, hair_color=?, height=?, killsess=?, last_charge=?, last_charge_amt=?, last_charge_try=?, last_name=?, last_nick_change=?, last_visit=?, locale=?, location=?, looking_age=?, looking_location=?, looking_sex=?, looking_words=?, marital_status=?, online=?, opaque_id=?, phone_number=?, picture=?, postal_code=?, profession=?, property=?, puan=?, rating=?, registiration_date=?, role=?, self_summary=?, server=?, sex=?, subs_model=?, subscription_end_date=?, subscription_start_date=?, tmp_uname=?, town=?, usage=?, username=?, version=?, visited=?, website=?, weight=?, xdate=? where id=?



Bu tabloda çok fazla kolon var aldırmayın.Adamlar böyle yapmış ne yapalım.








More than one
Yazar
blackout


avatar

Kayıt: 11.12.2008
20.07.2009-18:19 #62636
iemre yazdi
 
.....

Buradan hatanın ne olduğunu bulmak mümkün değil, bu sebeple "Sorgunun execute edilmeden önceki en son halini" trace edip buraya yazmanı istemiştim.

Ama bir tahminde bulunayım:
Hatada belirtilen stringin hemen öncesinde "town=?," ataması var.
Muhtemelen oradaki soru işaretinin yerine hiç bir değer gelmiyor yani "town=," şeklinde execute ediliyordur.





Yazar
iemre


avatar
Anadolu
Kayıt: 26.05.2007
20.07.2009-18:24 #62637
4 gündür bu hatanın sebebini araştırıyordum en sonunda buldum.Birsürü deneme yaptım tablolar üzerinde ve farkettim ki mySQL reserved wordları kolon ismi olarak yazmayı desteklemiyor.Yani usage mysql de kullanılan bir sabit kelime bu yüzden bu kolon ismiyle karşılaşınca hibernate sapıtıyor.Sorguda hiçbir hata yoktur.Sorun tabloda ki kolon ismin değiştirince düzeldi.İlginiz için teşekkür ederim.Hepinize başarılar.





More than one
Yazar
blackout


avatar

Kayıt: 11.12.2008
20.07.2009-19:09 #62638
iemre yazdi
 
4 gündür bu hatanın sebebini araştırıyordum en sonunda buldum.Birsürü deneme yaptım tablolar üzerinde ve farkettim ki mySQL reserved wordları kolon ismi olarak yazmayı desteklemiyor.Yani usage mysql de kullanılan bir sabit kelime bu yüzden bu kolon ismiyle karşılaşınca hibernate sapıtıyor.Sorguda hiçbir hata yoktur.Sorun tabloda ki kolon ismin değiştirince düzeldi.İlginiz için teşekkür ederim.Hepinize başarılar.

Evet doğru, benim de gözümden kaçmış. Her ihtimale karşı sorgularda veritabanı, tablo ve alan adları ters tırnak işareti (`) (0x60) ile garantiye alınmalıdır.

`usage` şeklinde kullanabilirsin.





Yazar
orhan


avatar
istanbul
admin
Kayıt: 17.11.2005
20.07.2009-22:30 #62639
Hataya hiç bakmadan yorum yapmışım. Bende bu durumla birkaç kez karşılaştım. mysql de 50 nin uzerinde fazladan anahtar kelime var. Hibernate ile kod yazarken bunlara dikkat etmek lazım. Sen ne olur ne olmaz şunları entitylerinin içinde bir arat.

http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html





N/A
Yazar
iemre


avatar
Anadolu
Kayıt: 26.05.2007
21.07.2009-10:07 #62640
blackout yazdi
 

Evet doğru, benim de gözümden kaçmış. Her ihtimale karşı sorgularda veritabanı, tablo ve alan adları ters tırnak işareti (`) (0x60) ile garantiye alınmalıdır.

`usage` şeklinde kullanabilirsin.


Eyvallah bunu bilmiyordum teşekkür ederim.

orhan yazdi
 
Hataya hiç bakmadan yorum yapmışım. Bende bu durumla birkaç kez karşılaştım. mysql de 50 nin uzerinde fazladan anahtar kelime var. Hibernate ile kod yazarken bunlara dikkat etmek lazım. Sen ne olur ne olmaz şunları entitylerinin içinde bir arat.

http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html



Bunları baya inceledim çok ilginç şeyler var.Mesela ben type değerinin de anahtar kelime olduğunu sanıyordum ama burdakilerin içinde yok.Daha öğrenilecek çok şey var bu kod dünyasında. smug







More than one
Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb