Re: [XMLPipeDB-developer] PreparedStatement query parameters
Brought to you by:
kdahlquist,
zugzugglug
From: Richard B. <rbr...@gm...> - 2011-08-25 03:27:00
|
Understood, we are on the same page. I have been contemplating how to do this (knowing that there will be a limit to the number of compared species) between using switch statement or using a more programmatic way. I'm leaning towards the switch at the moment because I know I can get it done that way although certainly not as elegant. Richard On Wed, Aug 24, 2011 at 7:44 PM, John David N. Dionisio <do...@lm...>wrote: > Hi Rich, > > Your second sentence/paragraph is right --- for every selected species, > there must be: (a) a corresponding "id = ?" clause, and (b) a corresponding > setString call, setting that parameter to the taxon ID. > > Implied, but not explicitly stated, is that *after* all of these clauses, > you have one more clause, for "type = ?". The parameter to set for that is > systemTable.getKey(). > > And, yes, the code for this must be based solely on the current content of > the selectedSpeciesProfiles collection. > > So, given what you are setting out to do (one clause per selected species > profile, with corresponding parameter, followed by specification of the > system type), here is what you have: > > - You have the collection of selected species profiles. ***For each > element in this collection, you must have an "id = ?" clause, and you must > set the parameter of that clause with the taxon ID of that element.*** > > - You have the systemTable object from which you will grab the parameter > for "type = ?". > > You have the (a) part down (that is, the concatenation of the correct > number of "id = ?" clauses to the query). It looks like this: > > for (int i = 0; i < selectedSpeciesProfiles.size(); > i++) { > basePrepareStatement > .append((i == 0) ? " and (" : " or ") > .append("id = ?"); > } > > Now, when the PreparedStatement has been created, ***you need to call > setString once for each "id = ?" clause that you appended in the code block > above.*** Finally, for the *last* parameter in the query (self-test > question: what is the index of that last parameter?), you must set that to > systemTable.getKey(). > > The translation of the above paragraph into Java is essentially what you > are setting out to do. > > John David N. Dionisio, PhD > Associate Professor, Computer Science > Loyola Marymount University > > > On Aug 24, 2011, at 7:26 PM, Richard Brous wrote: > > > OK, spent some time digging through it with an eye to that 3rd '?' > > > > I believe I simply need to add as many ps.setString(?, > Integer.toString(selected.getTaxon())); as there are species selected. > > > > Exports for single species work fine but if I want to export 2 species I > need the following (example is hardcoded): > > > > > > ps = ConnectionManager.getRelationalDBConnection().prepareStatement( > basePrepareStatement.toString() ); > > > > for > > > > ( SpeciesProfile selected : selectedSpeciesProfiles ) { > > > > ps.setString(1, Integer.toString(selected.getTaxon())); > > > > ps.setString(2, Integer.toString(selected.getTaxon())); > > > > ps.setString(3, systemTable.getKey()); > > > > result = ps.executeQuery(); > > > > etc... > > > > > > The solve is to programmatically build the ps.set... going forward. > > > > Richard > > > > > > > > On Tue, Aug 23, 2011 at 8:53 PM, John David N. Dionisio <do...@lm...> > wrote: > > > > Hi Rich, > > > > Sure, I don't think it will do any harm to give the method another > once-over. What you have to see solidly are: > > > > - What information does this method extract from the relational database? > > - What information does this method send to the Gene Database? > > > > As to the code --- no, I did not change anything. I only added comments. > Not sure about the successful export then. What I thought was that you did > execute the changes I described, and that is how you successfully exported > the .gdb. > > > > John David N. Dionisio, PhD > > Associate Professor, Computer Science > > Loyola Marymount University > > > > > > > > > > On Aug 23, 2011, at 8:41 PM, Richard Brous wrote: > > > > > Yes your comments make sense but I feel as though my understanding of > this method is the weak link... I'll work through it again tomorrow. > > > > > > Also, in thinking back over our discussions regarding > getSystemTableManager(), I read through the code again and saw your > comments. > > > > > > Then I realized I may have assumed you corrected the method when you > may only in fact had commented... Was this the case? > > > > > > But then how did I get a successful two species export yesterday? > > > > > > OK, my brain is starting to hurt... > > > > > > I'm going to head to bed and start fresh tomorrow. > > > > > > Richard > > > > > > On Tue, Aug 23, 2011 at 8:18 PM, John David N. Dionisio <do...@lm...> > wrote: > > > Hi Rich, > > > > > > The key is this message: > > > > > > org.postgresql.util.PSQLException: No value specified for parameter 3. > > > > > > That means the third question mark in the query (which turns out to be > type = ?) was never given a value. Check that method and make sure that the > code invokes as many set's as there are question marks in the query. And > for this particular query, the last set is for the gene database type. > > > > > > John David N. Dionisio, PhD > > > Associate Professor, Computer Science > > > Loyola Marymount University > > > > > > > > > On Aug 23, 2011, at 7:59 PM, Richard Brous <rbr...@gm...> wrote: > > > > > >> org.postgresql.util.PSQLException: No value specified for parameter 3. > > > > > > > ------------------------------------------------------------------------------ > > > EMC VNX: the world's simplest storage, starting under $10K > > > The only unified storage solution that offers unified management > > > Up to 160% more powerful than alternatives and 25% more efficient. > > > Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev > > > _______________________________________________ > > > xmlpipedb-developer mailing list > > > xml...@li... > > > https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer > > > > > > > > > > > <ATT00001..txt><ATT00002..txt> > > > > > > > ------------------------------------------------------------------------------ > > EMC VNX: the world's simplest storage, starting under $10K > > The only unified storage solution that offers unified management > > Up to 160% more powerful than alternatives and 25% more efficient. > > Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev > > _______________________________________________ > > xmlpipedb-developer mailing list > > xml...@li... > > https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer > > > > > > > > <ATT00001..txt><ATT00002..txt> > > > > ------------------------------------------------------------------------------ > EMC VNX: the world's simplest storage, starting under $10K > The only unified storage solution that offers unified management > Up to 160% more powerful than alternatives and 25% more efficient. > Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev > _______________________________________________ > xmlpipedb-developer mailing list > xml...@li... > https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer > |