• JDBCRowSet Not working as expected with DB2

    By Corne Roos 1 decade ago

    Hi guys

    I've stumbled (over all the hair I pulled out in trying to figure this out) onto something that I don't know if it is a bug or me not doing things correctly.

    I've installed the latest version of the extension library (v9) onto my domino 8.5.3FP2 server via a UpdateSite DB and also installed the OSGI DB2 driver via same UpdateSite DB.

    After this, I configured the XpagesJDBC.nsf database to point to my DB2 Express-C database (db2.jdbc file) and started testing. Everything works great when I use the data in the two tables (users, states) created with the setup functions on the Home page.

    I then modified the xpages.DBUtil java class to have a different Schema name and also the xpages.DataInitializer java class to create the same two tables, but with a schema name as part of the SQL statements. (e.g. "create table users (..." to "create table mySchema.users (.." )

    I reran the setup functions on the Homepage and my tables where created and populated with the correct data. The meta data functions (Left Hand Navigation) all works 100% showing my tables and schemas correctly.

    The JDBC_RowSetDatasource page however is where all falls to peaces. Changing my datasource SQLTable from "users" to "mySchema.users" works great and everything on the page works

     

    <xp:this.data>

    <xe:jdbcRowSet connectionName="db2" var="jdbcData1"

    sqlTable="users" showDeleted="true">

    </xe:jdbcRowSet>

    </xp:this.data>

     

    To

     

    <xp:this.data>

    <xe:jdbcRowSet connectionName="db2" var="jdbcData1"

    sqlTable="mySchema.users" showDeleted="true">

    </xe:jdbcRowSet>

    </xp:this.data>

    except for the .acceptChanges() method call.

     

    <xp:button value="Save Changes" id="button1">

    <xp:eventHandler event="onclick" submit="true"

    refreshMode="complete">

    <xp:this.action><![CDATA[#{javascript:jdbcData1.acceptChanges()}]]></xp:this.action>

    </xp:eventHandler>

    </xp:button>

    When I want to commit my changes to the DB, I get a sql exception (See below)

    The SQLCODE -108 says:  SQL0108N  The name "" has the wrong number of qualifiers.

    Am I doing something wrong, or is this a defect that needs to be logged? Looks like there is a problem when using custom schemas?

    Thanks and sorry for the long message :)

    SQL STACKTRACE

     

        HTTP JVM: com.ibm.db2.jcc.am.mo: DB2 SQL Error: SQLCODE=-108, SQLSTATE=42601, SQLERRMC=USERS, DRIVER=4.7.85</div>
    
        HTTP JVM: &nbsp;at com.ibm.db2.jcc.am.dd.a(dd.java:676)</div>
    
        HTTP JVM: &nbsp;at com.ibm.db2.jcc.am.dd.a(dd.java:60)</div>
    
        HTTP JVM: &nbsp;at com.ibm.db2.jcc.am.dd.a(dd.java:127)</div>
    
        HTTP JVM: &nbsp;at com.ibm.db2.jcc.am.nm.c(nm.java:2493)</div>
    
        HTTP JVM: &nbsp;at com.ibm.db2.jcc.am.nm.d(nm.java:2470)</div>
    
        HTTP JVM: &nbsp;at com.ibm.db2.jcc.am.nm.a(nm.java:1950)</div>
    
        HTTP JVM: &nbsp;at com.ibm.db2.jcc.t4.db.g(db.java:139)</div>
    
        HTTP JVM: &nbsp;at com.ibm.db2.jcc.t4.db.a(db.java:39)</div>
    
        HTTP JVM: &nbsp;at com.ibm.db2.jcc.t4.t.a(t.java:32)</div>
    
        HTTP JVM: &nbsp;at com.ibm.db2.jcc.t4.sb.h(sb.java:135)</div>
    
        HTTP JVM: &nbsp;at com.ibm.db2.jcc.am.nm.gb(nm.java:1921)</div>
    
        HTTP JVM: &nbsp;at com.ibm.db2.jcc.am.om.kc(om.java:2806)</div>
    
        HTTP JVM: &nbsp;at com.ibm.db2.jcc.am.om.qc(om.java:2921)</div>
    
        HTTP JVM: &nbsp;at com.ibm.db2.jcc.am.om.setObject(om.java:1738)</div>
    
        HTTP JVM: &nbsp;at com.ibm.xsp.extlib.jdbc.datasource.xpages.JdbcPoolConnection$PoolPreparedStatement.setObject(JdbcPoolConnection.java:1006)</div>
    
        HTTP JVM: &nbsp;at com.sun.rowset.internal.CachedRowSetWriter.updateOriginalRow(CachedRowSetWriter.java:495)</div>
    
        HTTP JVM: &nbsp;at com.sun.rowset.internal.CachedRowSetWriter.writeData(CachedRowSetWriter.java:355)</div>
    
        HTTP JVM: &nbsp;at com.sun.rowset.CachedRowSetImpl.acceptChanges(CachedRowSetImpl.java:875)</div>
    
        HTTP JVM: &nbsp;at com.sun.rowset.CachedRowSetImpl.acceptChanges(CachedRowSetImpl.java:934)</div>
    
        HTTP JVM: &nbsp;at com.ibm.xsp.extlib.jdbc.model.JdbcRowSetAccessor.acceptChanges(JdbcRowSetAccessor.java:425)</div>
    
        HTTP JVM: &nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)</div>
    
        HTTP JVM: &nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)</div>
    
        HTTP JVM: &nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)</div>
    
        HTTP JVM: &nbsp;at java.lang.reflect.Method.invoke(Method.java:611)</div>
    
        HTTP JVM: &nbsp;at com.ibm.jscript.types.JavaAccessObject.call(JavaAccessObject.java:321)</div>
    
        HTTP JVM: &nbsp;at com.ibm.jscript.types.FBSObject.call(FBSObject.java:161)</div>
    
        HTTP JVM: &nbsp;at com.ibm.jscript.ASTTree.ASTCall.interpret(ASTCall.java:175)</div>
    
        HTTP JVM: &nbsp;at com.ibm.jscript.ASTTree.ASTProgram.interpret(ASTProgram.java:119)</div>
    
        HTTP JVM: &nbsp;at com.ibm.jscript.ASTTree.ASTProgram.interpretEx(ASTProgram.java:139)</div>
    
        HTTP JVM: &nbsp;at com.ibm.jscript.JSExpression._interpretExpression(JSExpression.java:435)</div>
    
        HTTP JVM: &nbsp;at com.ibm.jscript.JSExpression.access$1(JSExpression.java:424)</div>
    
        HTTP JVM: &nbsp;at com.ibm.jscript.JSExpression$2.run(JSExpression.java:414)</div>
    
        HTTP JVM: &nbsp;at java.security.AccessController.doPrivileged(AccessController.java:284)</div>
    
        HTTP JVM: &nbsp;at com.ibm.jscript.JSExpression.interpretExpression(JSExpression.java:410)</div>
    
        HTTP JVM: &nbsp;at com.ibm.jscript.JSExpression.evaluateValue(JSExpression.java:251)</div>
    
        HTTP JVM: &nbsp;at com.ibm.jscript.JSExpression.evaluateValue(JSExpression.java:234)</div>
    
        HTTP JVM: &nbsp;at com.ibm.xsp.javascript.JavaScriptInterpreter.interpret(JavaScriptInterpreter.java:221)</div>
    
        HTTP JVM: &nbsp;at com.ibm.xsp.binding.javascript.JavaScriptMethodBinding.invoke(JavaScriptMethodBinding.java:111)</div>
    
        HTTP JVM: &nbsp;at com.ibm.xsp.application.ActionListenerImpl.processAction(ActionListenerImpl.java:60)</div>
    
        HTTP JVM: &nbsp;at javax.faces.component.UICommand.broadcast(UICommand.java:324)</div>
    
        HTTP JVM: &nbsp;at com.ibm.xsp.component.UIEventHandler.broadcast(UIEventHandler.java:366)</div>
    
        HTTP JVM: &nbsp;at com.ibm.xsp.component.UIDataPanelBase.broadcast(UIDataPanelBase.java:400)</div>
    
        HTTP JVM: &nbsp;at com.ibm.xsp.extlib.component.layout.UIVarPublisherBase.broadcast(UIVarPublisherBase.java:183)</div>
    
        HTTP JVM: &nbsp;at com.ibm.xsp.component.UIDataPanelBase.broadcast(UIDataPanelBase.java:400)</div>
    
        HTTP JVM: &nbsp;at com.ibm.xsp.component.UIViewRootEx.broadcast(UIViewRootEx.java:1535)</div>
    
        HTTP JVM: &nbsp;at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:307)</div>
    
        HTTP JVM: &nbsp;at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:428)</div>
    
        HTTP JVM: &nbsp;at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:94)</div>
    
        HTTP JVM: &nbsp;at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:210)</div>
    
        HTTP JVM: &nbsp;at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:96)</div>
    
        HTTP JVM: &nbsp;at com.ibm.xsp.controller.FacesControllerImpl.execute(FacesControllerImpl.java:250)</div>
    
        HTTP JVM: &nbsp;at com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:223)</div>
    
        HTTP JVM: &nbsp;at com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:204)</div>
    
        HTTP JVM: &nbsp;at com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:160)</div>
    
        HTTP JVM: &nbsp;at com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138)</div>
    
        HTTP JVM: &nbsp;at com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103)</div>
    
        HTTP JVM: &nbsp;at com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:583)</div>
    
        HTTP JVM: &nbsp;at com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1281)</div>
    
        HTTP JVM: &nbsp;at com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:854)</div>
    
        HTTP JVM: &nbsp;at com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:803)</div>
    
        HTTP JVM: &nbsp;at com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:572)</div>
    
        HTTP JVM: &nbsp;at com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1265)</div>
    
        HTTP JVM: &nbsp;at com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:658)</div>
    
        HTTP JVM: &nbsp;at com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:481)</div>
    
        HTTP JVM: &nbsp;at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:341)</div>
    
        HTTP JVM: &nbsp;at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:297)</div>
    
        HTTP JVM: &nbsp;at com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272)</div>
    
        &nbsp;</div>