Hello,
J'avais posté ce post dans la partie Hibernate du forum mais je pense en fin de compte qu'il s'agit plus d'un problème avec JDBC.
Hibernate me permet, dans ce cas-ci, de faire appel à JDBC grâce à l'objet Connection.
J'ai quelques soucis en ce qui concerne l'appel d'une stored procedure sur une base de donnée Oracle.
Il existe dans ma DB une procédure prenant en compte une cinquantaine de paramètres en entrée et 2 valeurs de retour (en fait les 2 derniers paramètres sont en INOUT).
J'essaie tant bien que mal d'exécuter cette procédure mais sans succès.
Une NullPointerException apparait lors de l'appel à transaction.execute().
Etant complètement novice, je ne vois pas du tout d'où cela pourrait venir. Il me semble que la procédure est effectivement trouvée car lorsque je retire des paramètres, une exception apparait indiquant que le nombre de paramètres est faux.
Voici le code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 public boolean add(ProductSpecs productSpecs) { Session session = (Session) HibernateUtil.currentSession(); final Transaction transaction = session.beginTransaction(); try { session.doWork(new Work() { public void execute(Connection connection) throws SQLException { try { CallableStatement call = connection.prepareCall("{?, ? = call bksgnvcrm.createorreturnproduct1nc(" + "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?," + "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, " + "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) }"); call.registerOutParameter(1, OracleTypes.INTEGER); call.registerOutParameter(2, OracleTypes.VARCHAR); int i = 3; call.setString(i++, typeofproduct); call.setString(i++, shiptositenumber); call.setString(i++, billtositenumber); call.setString(i++, ordernumber); call.setInt(i++, orderid); call.setString(i++, customerorderreference); call.setString(i++, productreference); ... call.setString(i++, servicerequestnumber); call.setString(i++, reasoncode); call.setString(i++, cpsname); call.setString(i++, flexibilityflag); call.setInt(i++, errcode); call.setString(i++, errmsg); call.execute(); ------> NullPointerException System.out.println("err_code: " + call.getString(1)); System.out.println("err_msg: " + call.getString(2)); transaction.commit(); } catch (SQLException e) { throw new SQLException(e); } } }); } catch (Exception e) { e.printStackTrace(); transaction.rollback(); return false; } return true; }
Pour la précision, le driver ojdbc utilisé est le suivant: 11.2.0.2.0.
Voici une partie de l'exception reçue:
Un peu d'aide serait la bienvenue
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 java.lang.NullPointerException at oracle.jdbc.driver.T4C8Oall.getNumRows(T4C8Oall.java:977) at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:1363) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1709) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:4364) at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:4445) at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:6268)
Partager