cancel
Showing results for 
Search instead for 
Did you mean: 

Cannot assign an empty string to host variable 1 !!!!!!

Former Member
0 Kudos

Hi all Javaers,

what does this exception means???

[code]

Exception com.sap.sql.log.OpenSQLException: Cannot assign an empty string to host variable 1.

at com.sap.sql.log.Syslog.createAndLogOpenSQLException(Syslog.java:85)

at com.sap.sql.log.Syslog.createAndLogOpenSQLException(Syslog.java:124)

at com.sap.sql.jdbc.common.dispatch.VarcharHostVariable.setString(VarcharHostVariable.java:26)

at com.sap.sql.jdbc.common.CommonPreparedStatement.setString(CommonPreparedStatement.java:570)

at com.sap.engine.services.dbpool.wrappers.PreparedStatementWrapper.setString(PreparedStatementWrapper.java:341)

at com.sap.logista.ejb.DatabaseTabaccaiEjbBean0Persistent.ejb_iInsert(DatabaseTabaccaiEjbBean0Persistent.java:777)

at com.sap.engine.services.ejb.entity.pm.UpdatablePersistent.ejbFlush(UpdatablePersistent.java:92)

at com.sap.engine.services.ejb.entity.pm.TransactionContext.flushAll(TransactionContext.java:429)

at com.sap.engine.services.ejb.entity.pm.TransactionContext.flush(TransactionContext.java:378)

at com.sap.engine.services.ejb.entity.pm.TransactionContext.beforeCompletion(TransactionContext.java:506)

at com.sap.engine.services.ejb.entity.SynchronizationList.beforeCompletion(SynchronizationList.java:136)

at com.sap.engine.services.ts.jta.impl.TransactionImpl.commit(TransactionImpl.java:220)

at com.sap.logista.ejb.DatabaseTabaccaiServicesObjectImpl0.storeRequest(DatabaseTabaccaiServicesObjectImpl0.java:395)

at com.sap.logista.ejb.DatabaseTabaccaiServices_Stub.storeRequest(DatabaseTabaccaiServices_Stub.java:235)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:324)

at com.sap.engine.services.ejb.session.stateless_sp5.ObjectStubProxyImpl.invoke(ObjectStubProxyImpl.java:187)

at $Proxy147.storeRequest(Unknown Source)

at com.sap.logista.bean.DatabaseTabaccaiProxy.store(DatabaseTabaccaiProxy.java:116)

at jsp_DatabaseTabaccai1148907720540._jspService(jsp_DatabaseTabaccai1148907720540.java:30)

at com.sap.engine.services.servlets_jsp.server.servlet.JSPServlet.service(JSPServlet.java:541)

at com.sap.engine.services.servlets_jsp.server.servlet.JSPServlet.service(JSPServlet.java:186)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:390)

at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:264)

at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:347)

at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:325)

at com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:887)

at com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:241)

at com.sap.engine.services.httpserver.server.Client.handle(Client.java:92)

at com.sap.engine.services.httpserver.server.Processor.request(Processor.java:148)

at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:33)

at com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41)

at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)

at java.security.AccessController.doPrivileged(Native Method)

at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:100)

at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:170)

[/code]

I have this problem in this line:

<i>id = calc.storeRequest(kunnr,sname,name,gender,bcity,bprov,bdate,pcity,pprov,email,rnum,rcom,rprov,rstras,..........);</i>

Thanx your help.

Vito

Accepted Solutions (0)

Answers (1)

Answers (1)

former_member182372
Active Contributor
0 Kudos

Hi Vito,

It means that you are trying to create or update CMP entity bean but not passing parameter which is obligatory in DB table. from my experience the only way to find out which field is missing is to do the following:

1) find your project in usr folder (C:\usr\sap\J2E\JC02\j2ee\cluster\server0\apps\sap.com\SavingsAccountEar\EJBContainer\jars\gen_SavingsAccountEjb.jar)

2) Find appropriate BeanName0PM.class, extract it from jar and jad it. (jad -lnc BeanName0PM.class)

3) find a place where exception is throw. See the SQL query and analyse it.

Best regards, Maksim Rashchynski.

Former Member
0 Kudos

Hi Maksim,

what is "jad"? From where I have to call it??

Tha ppropriate bean is the entity bean or the session bean?

thx,

Vito

Former Member
0 Kudos

jad is java decompiler tool. You can use other decomplier as well

http://www.kpdus.com/jad.html

you can check how to use it on the site.

regards,

piyush

ps: mark useful answers.

former_member182372
Active Contributor
0 Kudos

Hi Vito,

1) Jad is my favorite java decompiler (http://www.kpdus.com/jad.html)

2) To get "appropriate bean" you need to analyze whole stacktrace (part posted above is not complete) and get the place where <JavaBean>0PM`s persistency method is called.

best regards, Maksim Rashchynski.

Former Member
0 Kudos

I think you are speakin about this. Right??

[code]

com.sap.sql.log.OpenSQLException: <b>Cannot assign a java.lang.String object of length 4 to host variable 1</b> which has JDBC type VARCHAR(1).

at com.sap.sql.log.Syslog.createAndLogOpenSQLException(Syslog.java:85)

at com.sap.sql.log.Syslog.createAndLogOpenSQLException(Syslog.java:124)

at com.sap.sql.jdbc.common.dispatch.AbstractHostvariableSetter.checkLength(AbstractHostvariableSetter.java:309)

at com.sap.sql.jdbc.common.dispatch.VarcharHostVariable.setString(VarcharHostVariable.java:30)

at com.sap.sql.jdbc.common.CommonPreparedStatement.setString(CommonPreparedStatement.java:570)

at com.sap.engine.services.dbpool.wrappers.PreparedStatementWrapper.setString(PreparedStatementWrapper.java:341)

at com.sap.logista.ejb.DatabaseTabaccaiEjbBean0Persistent.ejb_iInsert(DatabaseTabaccaiEjbBean0Persistent.java:777)

at com.sap.engine.services.ejb.entity.pm.UpdatablePersistent.ejbFlush(UpdatablePersistent.java:92)

at com.sap.engine.services.ejb.entity.pm.TransactionContext.flushAll(TransactionContext.java:429)

at com.sap.engine.services.ejb.entity.pm.TransactionContext.flush(TransactionContext.java:378)

at com.sap.engine.services.ejb.entity.pm.TransactionContext.beforeCompletion(TransactionContext.java:506)

at com.sap.engine.services.ejb.entity.SynchronizationList.beforeCompletion(SynchronizationList.java:136)

at com.sap.engine.services.ts.jta.impl.TransactionImpl.commit(TransactionImpl.java:220)

at com.sap.logista.ejb.DatabaseTabaccaiServicesObjectImpl0.storeRequest(DatabaseTabaccaiServicesObjectImpl0.java:395)

at com.sap.logista.ejb.DatabaseTabaccaiServices_Stub.storeRequest(DatabaseTabaccaiServices_Stub.java:235)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:324)

at com.sap.engine.services.ejb.session.stateless_sp5.ObjectStubProxyImpl.invoke(ObjectStubProxyImpl.java:187)

at $Proxy157.storeRequest(Unknown Source)

at com.sap.logista.bean.DatabaseTabaccaiProxy.store(DatabaseTabaccaiProxy.java:116)

at jsp_DatabaseTabaccai1148912323827._jspService(jsp_DatabaseTabaccai1148912323827.java:30)

at com.sap.engine.services.servlets_jsp.server.servlet.JSPServlet.service(JSPServlet.java:541)

at com.sap.engine.services.servlets_jsp.server.servlet.JSPServlet.service(JSPServlet.java:186)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:390)

at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:264)

at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:347)

at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:325)

at com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:887)

at com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:241)

at com.sap.engine.services.httpserver.server.Client.handle(Client.java:92)

at com.sap.engine.services.httpserver.server.Processor.request(Processor.java:148)

at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:33)

at com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41)

at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)

at java.security.AccessController.doPrivileged(Native Method)

at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:100)

at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:170)

[/code]

Is this error more clear?? Thanks,

Vito

former_member182372
Active Contributor
0 Kudos

com.sap.logista.ejb.DatabaseTabaccaiEjbBean0Persistent.ejb_iInsert(DatabaseTabaccaiEjbBean0Persistent.java:777) is the place that you have to find. But now error seems to be different (Cannot assign a java.lang.String object of length 4 to host variable 1 which has JDBC type VARCHAR(1)) instead of (Cannot assign an empty string to host variable 1.).

Former Member
0 Kudos

Uhmmmm, it's strange. I have commented all the set methods (that provide to write data into DB) and I have runned only the follow, here seems to be the problem:

DatabaseTabaccaiEjbLocal tabaccaio = DatabaseTabaccaiEjbHome.create();

The DatabaseTabaccaiEjbBean entity bean has the follow:

	public Long ejbCreate() throws CreateException {
		// TODO : Change the ID generation procedure
		long id = System.currentTimeMillis();
		Long temp = new Long(id);
		setId(temp);		
		return null;
	}

Do you think this is wrong?? Thx

Vito

Former Member
0 Kudos

The line where there is the exception is in bold. But I reallt don't understand where is the problem:


	public long storeRequest(Long kunnr,String sname,String name,String gender,String bcity,String bprov,String bdate,String pcity,String pprov,String email,Integer rnum,String rcom,String rprov,String rstras,String rciv,Long rpstlz,Long rtelf1,Long rtelfx,Long rtelf2,String ades,String form,String aula,String aupre,String cons1,String cons2,String idate,String iip,String cdia,String triv,String dpl,String oform,String lform,String udate,String note,String stform,String faxr,String crdate,String iudate,String emailv,String reidate,String revdate,String inredate,String inrevdate,String campo1,String campo2,String campo3,String campo4,String campo5,String campo6,String campo7,String campo8,String campo9,String campo10) {
		String METHOD_NAME = "DatabaseTabaccaiServiceBean.storeRequest";
		loc.entering(METHOD_NAME);
		
		long result = 8;
		//Transform the String in Date format
		Date dplDate = getDate(dpl);
		Date udateDate = getDate(udate);
		Date faxrDate = getDate(faxr);
		Date crdateDate = getDate(crdate);
		Date iudateDate = getDate(iudate);
		Date reidateDate = getDate(reidate);
		Date revdateDate = getDate(revdate);
		Date inredateDate = getDate(inredate);
		Date inrevdateDate = getDate(inrevdate);
		
		
		try {
			//Access to the Entity Bean
			DatabaseTabaccaiEjbLocal tabaccaio = DatabaseTabaccaiEjbHome.create();
			/*
			tabaccaio.setKunnr(kunnr);
			tabaccaio.setSname(sname);
			tabaccaio.setName(name);
			tabaccaio.setGender(gender);
			tabaccaio.setBcity(bcity);
			tabaccaio.setBprov(bprov);
			tabaccaio.setBdate(bdate);
			tabaccaio.setPcity(pcity);
			tabaccaio.setPprov(pprov);
			tabaccaio.setEmail(email);
			tabaccaio.setRnum(rnum);
			tabaccaio.setRcom(rcom);
			tabaccaio.setRprov(rprov);
			tabaccaio.setRstras(rstras);
			tabaccaio.setRciv(rciv);
			tabaccaio.setRpstlz(rpstlz);
			tabaccaio.setRtelf1(rtelf1);
			tabaccaio.setRtelfx(rtelfx);
			tabaccaio.setRtelf2(rtelf2);
			tabaccaio.setAdes(ades);
			tabaccaio.setForm(form);
			tabaccaio.setAula(aula);
			tabaccaio.setAupre(aupre);
			tabaccaio.setCons1(cons1);
			tabaccaio.setCons2(cons2);
			tabaccaio.setIdate(idate);
			tabaccaio.setIip(iip);
			tabaccaio.setCdia(cdia);
			tabaccaio.setTriv(triv);
			tabaccaio.setDpl(dplDate);
			tabaccaio.setOform(oform);
			tabaccaio.setLform(lform);
			tabaccaio.setUdate(udateDate);
			tabaccaio.setNote(note);
			tabaccaio.setStform(stform);
			tabaccaio.setFaxr(faxrDate);
			tabaccaio.setCrdate(crdateDate);
			tabaccaio.setIudate(iudateDate);
			tabaccaio.setEmailv(emailv);
			tabaccaio.setReidate(reidateDate);
			tabaccaio.setRevdate(revdateDate);
			tabaccaio.setInredate(inredateDate);
			tabaccaio.setInrevdate(inrevdateDate);
			tabaccaio.setCampo1(campo1);
			tabaccaio.setCampo2(campo2);
			tabaccaio.setCampo3(campo3);
			tabaccaio.setCampo4(campo4);
			tabaccaio.setCampo5(campo5);
			tabaccaio.setCampo6(campo6);
			tabaccaio.setCampo7(campo7);
			tabaccaio.setCampo8(campo8);
			tabaccaio.setCampo9(campo9);
			tabaccaio.setCampo10(campo10);
			result = tabaccaio.getId().longValue();				
			loc.infoT("StoreRequest eseguito con successo! Result: "+ result);
			*/
		}catch (CreateException ex) {
			loc.errorT(METHOD_NAME, "EJBException: [0]" + new Object[] { ex.getMessage()});
			<b>loc.infoT("Create Exception in Session Bean - StorRequest");</b>			throw new EJBException(ex.getMessage(), ex);		
		}

Hoping in your help. thanks,

Vito

Former Member
0 Kudos

Vito,

No, the bold line is where exception actually loged, not were it is generated. The reason lies somewhere in tabaccaio.setXXX() methos, i.e. supplied parameter is too long.

My bet is that it is tabaccaio.setGender(gender) method. For example, gender value has value "MALE" where DB value should be "M" (and "F" for "FEMALE"). Just a guess...

VS

former_member182372
Active Contributor
0 Kudos

Hi Vito,

Did you try to find and jad DatabaseTabaccaiEjbBean0Persistent class?

Best regards, Maksim Rashchynski.

Former Member
0 Kudos

Hi Valery,

sorry, I have just solved the problem this morning. But you're right, I tried to write a string too long for the field set in the Oracle table.

However thanks for your help.

Vito