Re: Stored Procedure error is not catched
- From: "Rizwan" <hussains@xxxxxxxxxxxx>
- Date: Thu, 25 Aug 2005 17:59:57 -0400
"Joe Weinstein" <joeNOSPAM@xxxxxxx> wrote in message
news:430DF786.3010002@xxxxxxxxxx
>
>
> Rizwan wrote:
>
>> I am using MS SQL Server JDBC Driver. I call a stored procedure from my
>> java code. The Stored Procedure does some inserts. One of the insert
>> failed but in my java code the SQLException is not thrown. Can anybody
>> tell me how to fix this bug?
>>
>> Thanks
>
> Hi. The problem is that the SQLException (or really the error message
> from the DBMS, that will be turned into a SQLException) is still out on
> the network for the statement, until it is read by the Statement. This
> isn't happening immediately because your procedure is doing multiple
> inserts, and some of the first ones succeed, so the first things on
> the line are successful update counts.
> You need to add processing after the execute() to get all the
> returns, and then you will get your exception. Here is an example which
> contains the ideal code for processing all the inline returns from
> any stored procedure. With this, you do get your expected exception.
>
> Joe Weinstein at BEA Systems
>
> c = d.connect("jdbc:bea:sqlserver://joe", props);
>
> System.out.println("Driver version is " +
> c.getMetaData().getDriverVersion() );
>
> DatabaseMetaData dd = c.getMetaData();
> System.out.println("Driver version is " +
> dd.getDriverVersion() );
> System.out.println("Database Major version is " +
> dd.getDatabaseMajorVersion() );
> System.out.println("Database Minor version is " +
> dd.getDatabaseMinorVersion() );
>
> Statement s = c.createStatement();
>
> try { s.executeUpdate("drop procedure joeproc"); } catch
> (Exception ignore){}
> try { s.executeUpdate("drop table joetable"); } catch (Exception
> ignore){}
>
> s.executeUpdate("create table joetable (bar varchar(30) not
> null)");
>
> s.executeUpdate("create procedure joeproc as "
> + " begin "
> + " insert into joetable values('1') "
> + " insert into joetable values(NULL) " //
> second insert will fail
> + " insert into joetable values('2') "
> + " end ");
>
> PreparedStatement ps = c.prepareStatement("{ call joeproc() }");
> boolean getResultSet = ps.execute();
> int updateCount = -1;
>
> while (true) { // handle all in-line results from any procedure
> if (getResultSet) {
> ResultSet r = ps.getResultSet();
> while (r.next()) {
> // process result set
> }
> r.close();
> } else {
> updateCount = ps.getUpdateCount();
> if (updateCount != -1) {
> ;// process update count
> }
> }
> if ((!getResultSet) && (updateCount == -1)) break; // done
> with loop
> getResultSet = ps.getMoreResults();
> }
>
> I get:
>
> Driver version is 3.40.57 (012747.007227.008728)
> Driver version is 3.40.57 (012747.007227.008728)
> Database Major version is 8
> Database Minor version is 0
> java.sql.SQLException: [BEA][SQLServer JDBC Driver][SQLServer]Cannot
> insert the value NULL into
> column 'bar', table 'CCTEST.dbo.joetable'; column does not allow nulls.
> INSERT fails.
>
> The exception arives during the getMoreResults() call.
>
My java code is pretty simple:
Connection conn = null;
CallableStatement stmt = null;
try {
conn = ConnectionHelper.getConnection();
stmt = conn.prepareCall("{call ta_ProcessPayroll()}");
stmt.execute();
} catch (SQLException sqle) {
sqle.printStackTrace();
} finally {
...
}
I tried the same code with Type 1 Driver (JDBC-ODBC Bridge) and error was
caught by the SQLException. So I think this is bug with Microsoft SQL Server
JDBC Driver. What do you think?
.
- Follow-Ups:
- Re: Stored Procedure error is not catched
- From: Joe Weinstein
- Re: Stored Procedure error is not catched
- From: Rizwan
- Re: Stored Procedure error is not catched
- References:
- Stored Procedure error is not catched
- From: Rizwan
- Re: Stored Procedure error is not catched
- From: Joe Weinstein
- Stored Procedure error is not catched
- Prev by Date: Re: Bug in JDBC SQL extensions parser of the Beta SQLServer driver
- Next by Date: Multiple ResultSets
- Previous by thread: Re: Stored Procedure error is not catched
- Next by thread: Re: Stored Procedure error is not catched
- Index(es):
Relevant Pages
|