La prima volta che si utilizza Oracle, normalmente si utilizza SQLServer e si è verificato un problema curioso. Mi stavo strappando i capelli con questo problema, e provando cose a caso e uno è successo a lavorare.Come creare booleani e accedervi con java/oracle stored proc
Quindi, in origine, avevo solo due parametri e tutto ha funzionato correttamente. Ho quindi desiderato aggiungere un valore booleano per consentire più percorsi nel mio stored proc. Lo provo nel mio ambiente db, e non ci sono errori e recupero i dati che mi aspetto. Aggiungo quindi le poche righe nel mio codice java per estrarre questi dati, e improvvisamente ottengo l'errore "wrong number or types of parameters
".
Dopo aver provato diverse cose, ho semplicemente cambiato il tipo in Oracle da Boolean a Int, lasciando il codice java ancora come "setBoolean(3, true)
" e tutto funziona.
Quindi le mie domande sono:
1) che cosa sono io mando con questa setBoolean() sul lato Java, e ciò che è sempre di Oracle?
2) cosa si aspettava prima quando era di tipo "Boolean
, e perché non è compatibile con setBoolean()
?"
3) Devo usare Oracle type int con java setBoolean(), o qualche altra combinazione come Oracle Varchar e setString(), quando si va alla velocità?
Java:
String jobquery = "{call PKG_TEST.GET_PLAN_DATA(?,?,?)}";
CallableStatement callStmt = con.prepareCall(jobquery);
callStmt.setString(1,"15105");
callStmt.setString(2, "");
callStmt.setBoolean(3, true);
Oracle SP (precedente):
PROCEDURE GET_PLAN_DATA(
NAME_N_IN IN VARCHAR2,
TYPE_C_IN IN VARCHAR2 DEFAULT NULL,
ONLY_RESTRICTIONS_IN IN BOOLEAN DEFAULT FALSE)
Oracle cambiato a:
PROCEDURE GET_PLAN_DATA(
NAME_N_IN IN VARCHAR2,
TYPE_C_IN IN VARCHAR2 DEFAULT NULL,
ONLY_RESTRICTIONS_IN IN INT DEFAULT 0)
Si potrebbe voler leggere questo: https://forums.oracle.com/forums/thread.jspa?threadID=611049 –