Hoi allemaal,
Onze projectgroep heeft een beetje een probleem met Stored Procedures in MS SQL Server 2000. Ik zal het ff uitleggen.
Wat is de bedoeling?
De bedoeling is om een recordset te vergaren door middel van het aanroepen van een stored procedure op een server.
Client (Java) -> Roept Stored Procedure aan op server -> SQL Server run Stored Procedure -> geef resultset aan client terug met uitkomst Stored procedure.
Wat hebben we?
De volgende (correct werkende) Stored Procedure:
En de volgende Java code:
Andere manier die geprobeerd is:
Deze regel is vervangen door:
Java Foutmelding:
Geen!
Pas op het moment dat we de resultset willen gaan gebruiken krijgen we een Nullpointer exception. Helaas logisch, want de resultset is namelijk niet gevuld. Daar zit het probleem nu juist. De resultset word niet gevuld.
Overige info:
- Google -> geen werkend resultaat
- java.sun.com -> search in forums en training -> geen bruikbaar resultaat
- Stored Procedure is getest en die werkt.
- Vermoeden wat er fout gaat: de call getProducts. Aangezien dit:
volgens java ook nogsteeds werkt.
Iemand enig idee wat we fout doen???
Sorry voor het lange bericht, maar hopelijk is het nu wel duidelijk.
Onze projectgroep heeft een beetje een probleem met Stored Procedures in MS SQL Server 2000. Ik zal het ff uitleggen.
Wat is de bedoeling?
De bedoeling is om een recordset te vergaren door middel van het aanroepen van een stored procedure op een server.
Client (Java) -> Roept Stored Procedure aan op server -> SQL Server run Stored Procedure -> geef resultset aan client terug met uitkomst Stored procedure.
Wat hebben we?
De volgende (correct werkende) Stored Procedure:
code:
1
2
3
4
5
6
7
| CREATE PROCEDURE getProducts AS BEGIN Select Product.*, Categorie.Naam as Categorie, Merk.Naam as Merk From Product Inner Join Categorie On Product.Categorie_id = Categorie.Categorie_id Inner Join Merk On Product.Merk_id = Merk.Merk_id END |
En de volgende Java code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| public ResultSet excuteStoredProcedure( Connection connection, String storedProcedureName )
{
ResultSet resultSet =null;
CallableStatement callableStatement = null;
try
{
// callableStatement = connection.prepareCall("{call " + storedProcedureName + "}");
callableStatement = connection.prepareCall("{call getProducts}");
if ( callableStatement.execute() )
{
resultSet = callableStatement.getResultSet();
}
}
catch (SQLException e) { System.out.println("Whelp er gaat iets goed fout: \n" + e }
return resultSet;
} |
Andere manier die geprobeerd is:
code:
1
| resultSet = callableStatement.getResultSet(); |
Deze regel is vervangen door:
code:
1
| resultSet = callableStatement.executeQuery(); |
Java Foutmelding:
Geen!
Pas op het moment dat we de resultset willen gaan gebruiken krijgen we een Nullpointer exception. Helaas logisch, want de resultset is namelijk niet gevuld. Daar zit het probleem nu juist. De resultset word niet gevuld.
Overige info:
- Google -> geen werkend resultaat
- java.sun.com -> search in forums en training -> geen bruikbaar resultaat
- Stored Procedure is getest en die werkt.
- Vermoeden wat er fout gaat: de call getProducts. Aangezien dit:
code:
1
2
3
4
5
6
| callableStatement = connection.prepareCall("{call dit zou niet moeten werken}");
if ( callableStatement.execute() )
{
// Java komt hier, ondanks een aanroep die niet zou moeten werken.
} |
volgens java ook nogsteeds werkt.
Iemand enig idee wat we fout doen???
Sorry voor het lange bericht, maar hopelijk is het nu wel duidelijk.
[ Voor 8% gewijzigd door Verwijderd op 22-12-2002 13:50 . Reden: Wil niet vervelend over komen ]