I don't know if it'll help, but here's one that I use:
if ( db.connect() ) {
CallableStatement cstmt =
db.getConnection().prepareCall( "begin delete_record( ?, ?, ?,
? ); end;" );
cstmt.setInt( 1, ( ( Integer ) ht.get(
teq.ARCHIVE_NBR ) ).intValue() );
cstmt.setString( 2, session.getValue( "USERNAME" ).toString() );
cstmt.setString( 3, "" + request.getRemoteAddr() );
cstmt.registerOutParameter( 4, java.sql.Types.VARCHAR );
cstmt.executeUpdate();
result = cstmt.getString( 4 );
deleted = true;
cstmt.close();
db.commit();
}
The "db" object is a wrapper that I have around the database connection.
Otherwise it
should be self-explainitory. Hope this helps some...
--mikej
-=-----
mike jackson
[EMAIL PROTECTED]
> -----Original Message-----
> From: Turner, John [mailto:[EMAIL PROTECTED]]
> Sent: Tuesday, August 20, 2002 4:49 AM
> To: 'Tomcat Users List'
> Subject: RE: OFF-TOPIC: Pointers to CallableStatement docs?
>
>
>
> Thanks, but I'm not getting any Java-related error messages. The
> Java code
> just blows right on through, as everything keys off of the return status,
> which is always "false" or "negative". This is because the
> stored procedure
> never executes, and according to the debug log printed by the driver, it's
> parameter related...that is, whatever I am doing with set*() and
> registerOutParameter() doesn't match up with what the procedure is
> expecting.
>
> That's my question...can anyone point me to a resource that shows how to
> call real-world stored procedures correctly with CallableStatement? By
> "real-world" I don't mean rudimentary "take two numbers and add them
> together" or "get a row from a table" procedures, I can already do that.
> I'm looking for a more advanced tutorial, something that shows how to have
> inputs, outputs, in/outputs, and a return status, all at once. It must be
> possible, I just can't figure it out, and can't find any resources that
> explain how to do it. We have VB DLLs calling these procedures in
> production, so I know the procedures work, at least in
> conjunction with VB.
>
> John Turner
>
> -----Original Message-----
> From: Jim Urban [mailto:[EMAIL PROTECTED]]
> Sent: Monday, August 19, 2002 5:05 PM
> To: 'Tomcat Users List'
> Subject: RE: OFF-TOPIC: Pointers to CallableStatement docs?
>
>
> What error are you receiving? Can you post a stack trace and a code clip
> with line numbers so we can see what is failing?
>
>
> Jim Urban - [EMAIL PROTECTED]
> Park City Solutions Inc.
> Clinical Connectivity Suite Product Manager
> Suite 295
> 500 Park Blvd.
> Itasca, IL 60143
> Voice: (630) 250-3045 x106
> Fax: (630) 250-3046
>
> CONFIDENTIALITY NOTICE
> This message and any included attachments are from Park City
> Solutions Inc.
> and are intended only for the entity to which it is addressed.
> The contained
> information is confidential and privileged material. If you are not the
> intended recipient, you are hereby notified that any use,
> dissemination, or
> copying of this communication is strictly prohibited and may be
> unlawful. If
> you have received this communication in error please notify the sender of
> the delivery error by e-mail or call Park City Solutions Inc. corporate
> offices at (435) 654-0621
>
> -----Original Message-----
> From: Turner, John [mailto:[EMAIL PROTECTED]]
> Sent: Monday, August 19, 2002 1:27 PM
> To: 'Tomcat Users List'
> Subject: RE: OFF-TOPIC: Pointers to CallableStatement docs?
>
>
> Thanks! I've set up my code as you've described, but no luck.
> For example,
> here is the relevant portion of the stored procedure declaring the
> parameters (forgive me, I don't work with stored procedures that often, so
> this may not be the right portion of the procedure to focus on):
>
> @userid_in varchar(8),
> @password_in varchar(8),
> @ip_addr varchar(15),
> @http_referer varchar(80),
> @http_user_agent varchar(80),
> @pwdvalid bit OUTPUT,
> @userenabled bit OUTPUT,
> @graceexceeded bit OUTPUT,
> @adminuser char(1) OUTPUT,
> @title varchar(4) OUTPUT
>
> My code looks like this:
>
> // prepare the stored procedure statement
> try {
> cstmt = sConn.prepareCall("{? = call
> sp_validate_pwd(?,?,?,?,?,?,?,?,?,?)}");
> } catch (SQLException sqle) {
> sqle.printStackTrace();
> }
>
> // set the input parameters
> try {
> cstmt.setString(2, strUserID);
> cstmt.setString(3, strPassword);
> cstmt.setString(4, strRemoteAddress);
> cstmt.setString(5, strReferURL);
> cstmt.setString(6, strHTTPUserAgent);
> } catch (Exception e) {
> e.printStackTrace();
> }
>
> // register the output parameters for the stored procedure
> try {
> cstmt.registerOutParameter(1, Types.INTEGER);
> cstmt.registerOutParameter(7, Types.BIT);
> cstmt.registerOutParameter(8, Types.BIT);
> cstmt.registerOutParameter(9, Types.BIT);
> cstmt.registerOutParameter(10, Types.CHAR);
> cstmt.registerOutParameter(11, Types.VARCHAR);
> } catch (Exception e) {
> e.printStackTrace();
> }
>
> // execute the stored procedure
> try {
> cstmt.execute();
> } catch (SQLException sqle) {
> sqle.printStackTrace();
> }
>
> // grab the results from the stored procedure call
> try {
> spReturnStatus = cstmt.getInt(1);
> isValid = cstmt.getBoolean(7);
> isEnabled = cstmt.getBoolean(8);
> isExceeded = cstmt.getBoolean(9);
> strAdmin = cstmt.getString(10);
> strTitle = cstmt.getString(11);
> } catch (SQLException sqle) {
> sqle.printStackTrace();
> }
>
> cstmt = null;
>
> I've tried different calls, putting the output parameters first (2-6) and
> the inputs last (7-11), I've tried no return value, putting that return
> value at the end (#11), etc. with no luck. All of the variables in the
> setString() methods are set before calling setString(). Am I at least on
> the right track with the code shown above? Or have I completely
> missed it?
>
> Thanks again for replying!
>
> John Turner
>
>
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
> Sent: Monday, August 19, 2002 2:14 PM
> To: Tomcat Users List
> Subject: RE: OFF-TOPIC: Pointers to CallableStatement docs?
>
>
>
> It's been sometime since I used JDBC and SQL Server. But here are a few
> points to note:
> 1) Your first "?" is the return status. It should be registered as an OUT
> parameter.
> 2) Remember to use the right JDBC type when registering the OUT
> parameters.
> This is of utmost importance.
> 3) All ouput parameters should be registered before the call to the stored
> proc is made.
> 4) cstmt.setXXX(<questionmark_placeholder_position>, <value>)
> 5) cstmt.getXXX(<questionmark_placeholder_position>)
> 6) If your stored procedure is returning any result set, retrieve all the
> results before retrieving the OUT parameters. To make sure all the results
> have been retrieved, use the getMoreResults method.
>
> An example:
> ------------------
> TestAdd proc adds two numbers.
> It returns a status of 1 is the any one of the input parameters is less
> than 0.
> It returns a status of 0 if the add worked and it also returns a result of
> the addition.
>
> Stored proc:
> -----------------
> create procedure TestAdd @param1 int, @param2 int, @param3 int output as
> begin
> if @param1 < 0 and @param2 <0
> begin
> return 1
> end
> else begin
> select @param3 = @param1 + @param2
> return 0
> end
> end
>
> Java code:
> ----------------
> CallableStatement cstmttmt = con.prepareCall("{? = call TestAdd(?, ?, ?)}"
> );
> cstmt.registerOutParameter(1, Types.INTEGER);
> cstmt.setInt(2, 10);
> cstmt.setInt(3, 20);
> cstmt.registerOutParameter(4, Types.INTEGER);
> cstmt.execute();
> System.out.println("status : " + cstmt.getInt(1));
> System.out.println("value after adding 10 and 20 : " + cstmt.getInt(4));
>
>
> Hope this helps.
> RS
>
>
>
>
>
> "Turner, John"
>
> <[EMAIL PROTECTED]> To: 'Tomcat
> Users List'
>
>
> <[EMAIL PROTECTED]>
> 08/19/02 11:53 AM cc:
>
> Please respond to Subject: RE: OFF-TOPIC:
> Pointers to CallableStatement
> "Tomcat Users docs?
>
> List"
>
>
>
>
>
>
>
>
>
>
> Right. My setup looks like this:
>
> cstmt = sConn.prepareCall("{? = call
> sp_validate_pwd(?,?,?,?,?,?,?,?,?,?)}");
>
> Basically, there are 5 inputs (username, password, IP address, browser
> type,
> and referer) and I'm supposed to get a return status back (bad or
> good) and
> 5 outputs: 3 booleans and 2 strings (isValid, isExceeded, isEnabled, name,
> and title).
>
> I've tried everything I can think of...only having 6 question
> marks, having
> all 11, only using 5, etc. to no avail. I enabled debug logging on the
> driver, and I get messages that say "parameter my_parameter not registers
> as
> output" or "not registered as input", even when they are, and
> regardless of
> how I use the set*() and registerOutParameter() methods. Very confusing.
>
> I'd love to find a complete stored procedures How-To somewhere that
> addresses complex stored procedures instead of the basic tutorials that do
> simple math or just insert a row.
>
> Thanks for the reply.
>
> John
>
> -----Original Message-----
> From: Wagoner, Mark [mailto:[EMAIL PROTECTED]]
> Sent: Monday, August 19, 2002 12:31 PM
> To: 'Tomcat Users List'
> Subject: RE: OFF-TOPIC: Pointers to CallableStatement docs?
>
>
> When you say it returns a status, do you mean it is a function (I work
> primarily with Oracle, so if this does not apply to MS I apologize)?
>
> If so, you need to make the call something like:
>
> CallableStatement stmt = conn.prepareCall("{call ? = proc(?,?, ... )}");
>
>
> -----Original Message-----
> From: Turner, John [mailto:[EMAIL PROTECTED]]
> Sent: Monday, August 19, 2002 12:18 PM
> To: '[EMAIL PROTECTED]'
> Subject: OFF-TOPIC: Pointers to CallableStatement docs?
>
>
>
> Hello -
>
> I think there is a java-user list, or even a jdbc-interest list, but I'd
> rather not subscribe when all I need is one quick pointer, so I am hoping
> someone on this list can get me started.
>
> I'm having quite a bit of difficulty working with stored procedures in my
> classes and servlets. The database is MS SQL Server 2000. I've
> read every
> single doc I can find, both at Sun, through Google, and even through the
> driver vendor's documentation. I even scammed some code from a JDBC 3.0
> book (the only one I could find) at Border's, with still no luck.
>
> Can anyone point me to a resource that explains how to setup stored
> procedures in a CallableStatement correctly? I understand about
> registering
> the output parameters and setting the input types, and I understand that
> the
> parameters in a CallableStatement are numbered from left to right starting
> at 1. I've seen the examples at Sun, etc. but they're not much help.
>
> The problem is that all of the examples I can find deal with very simple,
> very rudimentary stored procedures, like finding the average of two
> numbers,
> or whatever. Our stored procedures are more involved than that.
>
> Example: a stored procedure used to validate logins. It has 5 input
> parameters, and 5 output parameters. It returns a status. According to
> the
> docs I have read so far, that means I should have a CallableStatement with
> 11 question marks ("?") in it (5 + 5 + 1 = 11). but that doesn't
> work, and
> I have tried every combination of inputs, outputs, input/outputs,
> etc. that
> I can think of, to no avail.
>
> Any help or pointers to resources that explain stored procedures and
> CallableStatements in more in-depth fashion would be greatly appreciated.
>
> - John
>
> ============================================
> John Turner
> [EMAIL PROTECTED] | 248-488-3466
> Advertising Audit Service
> http://www.aas.com
>
>
> --
> To unsubscribe, e-mail:
> <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
> <mailto:[EMAIL PROTECTED]>
>
> --
> To unsubscribe, e-mail:
> <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
> <mailto:[EMAIL PROTECTED]>
>
> --
> To unsubscribe, e-mail: <
> mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <
> mailto:[EMAIL PROTECTED]>
>
>
>
>
>
>
>
> --
> To unsubscribe, e-mail:
> <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
> <mailto:[EMAIL PROTECTED]>
>
> --
> To unsubscribe, e-mail:
> <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
> <mailto:[EMAIL PROTECTED]>
>
>
> --
> To unsubscribe, e-mail:
> <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
> <mailto:[EMAIL PROTECTED]>
>
> --
> To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>