AppletTalk.com Forum Index AppletTalk.com
Java discussions newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

[ORACLE] Sapere il tipo del parametro

 
Post new topic   Reply to topic    AppletTalk.com Forum Index -> Java (Italian)
View previous topic :: View next topic  
Author Message
Davide Gurgone
Guest





PostPosted: Fri Jun 24, 2005 12:20 pm    Post subject: [ORACLE] Sapere il tipo del parametro Reply with quote



Salve a tutti,
sto rifacendo una classe java che esegue query su DB, a partire da una
stringa e da un vettore di parametri che poi referenzio
posizionalmente.

La classe vuole automatizzare il processo di Prepared Statement e
sembra funzionare abbastanza bene.

Ho pero' un problema. Nel caso in cui l'oggetto passato sia null, per
poterlo impostare, il metodo prepared statement.setnNull(int, int) si
aspetta un int per la posizione ed un int per il tipo SQL.

Il problema e' che pero' se l'oggetto e' null, non posso sapere con
instanceof il tipo dell'oggetto. percui e' il DB a dovermi dire di che
tipo si tratti.

Ho provato svariate strade, tra le quali

setNull(posizione, java.sql.Types.NULL); // Tipo Non Valido
setObject(posizione, null); // Idem
// Feature non implementata! (La oracle, ma vi rendete conto?)
setNull(posizione,
statement.getParameterMetaData().getParameterType(posizione));

Ecco un esempio: (DataContainer e' un'arraylist di HashMap e sysLog e'
il logger di log4j) Al momento uso un accrocchio per farlo girare,
imposto il parametro come varchar.

Connection con;
public void execSQLStatement( String sql, Vector params )
throws SQLException {
sysLog.info("n"+sql);
try {
PreparedStatement psQuery = con.prepareStatement(sql);
for( int i = 0; i Object o = params.get(i);
if (o instanceof java.lang.String){
psQuery.setString(i+1, (String)o);
} else if (o instanceof java.lang.Integer){
psQuery.setInt(i+1, ((Integer)o).intValue());
} else if (o instanceof java.lang.Double){
psQuery.setDouble(i+1, ((Double)o).doubleValue());
} else if (o instanceof java.util.Date){
psQuery.setDate(i+1,
DateUtil.dateToSqlDate((java.util.Date)o));
} else if (o instanceof java.sql.Date){
psQuery.setDate(i+1, (java.sql.Date)o);
} else if (o==null){
psQuery.setNull(i+1,java.sql.Types.VARCHAR);
} else {
psQuery.setString(i+1, o.toString());
}
}
int result = psQuery.executeUpdate();
sysLog.info("Statement Result:"+result);
} catch (Exception e) {
sysLog.error("execSQLStatement: Query Execution FAULT", e);
}
}


Accetto qualsiasi consiglio. Se non ci fosse soluzione, pensavo di
creare un contenitore di parametri, che prevedesse il loro nome e tipo.



Spero che qualcuno mi sappia aiutare, Saluti,
Davide

Back to top
Marco Trevisan
Guest





PostPosted: Fri Jun 24, 2005 1:29 pm    Post subject: Re: [ORACLE] Sapere il tipo del parametro Reply with quote



Davide Gurgone wrote:
Quote:
Connection con;
public void execSQLStatement( String sql, Vector params )
throws SQLException {
....
}


Accetto qualsiasi consiglio. Se non ci fosse soluzione, pensavo di
creare un contenitore di parametri, che prevedesse il loro nome e tipo.


Potresti passare, in params, invece che dei null dei riferimenti a
oggetti:

class NULL {
public static final DATE=new Date();
public static final INT=new Integer(Integer.MAX_INT);
....

}

e poi confrontare params con NULL.DATE, ...

--
Marco

Back to top
Davide Gurgone
Guest





PostPosted: Fri Jun 24, 2005 2:56 pm    Post subject: Re: Sapere il tipo del parametro Reply with quote



il problema, facendo in questo modo, non mi si risolve, perche' non
sempre conosco che tipo di oggetto ho e se questo e' null, a runtime.

Sapendolo a priori potrei anche mapparmi gli int corrispondenti
direttamente nella classe. In realta' a me serve risolverla Oracle
Oriented..

Comunque, per ora, il metodo che ho postato prima, funziona sia con
tipi String, che Integer, che Date. A quanto pare ad Oracle non importa
che tipo null si trova davanti, l'importante e' che sia un tipo che
riconosce.

Boo. Certo non e' una soluzione pulita........

Back to top
Francesco Galli
Guest





PostPosted: Fri Jun 24, 2005 3:00 pm    Post subject: Re: Sapere il tipo del parametro Reply with quote

Io non ho capito molto bene cosa ti serve, pero' nella mia (scarsa)
conoscenza di Oracol Wink e' presente questa scrittura

INSERT INTO...

Values

variabile INDICATOR variabile_indicatore;



dove se la variabile indicatore e' minore di zero Oracle piazza da se' un
bel null. Non avendoci capito UBM magari sto sproloquiando, pero' forse ti
puo' servire...

--
---
Francesco Galli / Cinghiale Mannaro
Personal: http://cinghialemannaro.splinder.com
TMS project: http://tms.inera.it


Back to top
Davide Gurgone
Guest





PostPosted: Fri Jun 24, 2005 3:38 pm    Post subject: Re: Sapere il tipo del parametro Reply with quote

Booo..

Sinceramente e' la prima volta che sento parlare di quella sintassi...

Io conosco invece la seguente:

INSERT INTO TABELLA VALUES ( ?,?,?,?,.....,?)

poi, parametro per parametro, li referenzio posizionalmente, a partire
dall'indice 1 e se non lo passo, solleva un'eccezione, con testo
"parametro mancante nell'indice 'x' ".

Percui non ho i parametri per nome. Almeno, non so come
referenziarli... mi interesserebbe pero' saperne di piu'.... Sai dove
trovo documentazione su quella gestione a cui fai riferimento? O magari
qualche pezzetto di codice???

Grazie,
Davide.

Back to top
Francesco Galli
Guest





PostPosted: Fri Jun 24, 2005 3:47 pm    Post subject: Re: Sapere il tipo del parametro Reply with quote

Questo e' un pezzettino di codice in pro-c:



EXEC SQL

insert into foto

(

ID,

FOTO,

DESCR,

NOME_FILE

)

values

(

:id_foto,

:foto,

:descrizione INDICATOR :descrizione_ind,

:file_name

);



dove :descrizione e' in realtà un char* e descrizione_ind uno short. Poco
piu' in su c'e' un controllo: se descrizione e' vuoto allora assegno a
descrizione_ind un valore negativo.



Penso che ti possa far comodo anche in java, ma non chiedermi di piu': non
sono assolutamente un grande esperto di oracle (anzi, lo odio) :-)


--
---
Francesco Galli / Cinghiale Mannaro
Personal: http://cinghialemannaro.splinder.com
TMS project: http://tms.inera.it


Back to top
Davide Gurgone
Guest





PostPosted: Mon Jun 27, 2005 8:49 am    Post subject: Re: Sapere il tipo del parametro Reply with quote

[CUT]
Quote:
(
:id_foto,
:foto,
:descrizione INDICATOR :descrizione_ind,
:file_name
);
[CUT]

D'accordo la sintassi, ma come referenzi la variabile? Anche in Delphi
c'e' una roba simile, ma non sono riuscito a riprodurla in java.

In delphi (pascal) si scrive:

nomeQuery.parameters.paramByName("foto").text = 'Nome della
fotografia';

Ma in java ho

PreparedStatement stmt = connection.getPreparedStatement(
"La mia query col parametro indicato come ? ");
stmt.setString(1, "valore del parametro"); // 1 e' la posizione del
parametro.


Tu come fai???


Back to top
Francesco Galli
Guest





PostPosted: Mon Jun 27, 2005 10:59 am    Post subject: Re: Sapere il tipo del parametro Reply with quote

Non lo uso con Giava, pero' non potresti fare un...

PreparedStatement stmt = connection.getPreparedStatement(
"La mia query col parametro indicato come ? indicator ?");
stmt.setString(1, stringaForseNull); // 1 e' la posizione del
parametro.
stmt.setString((stringaForseNull == null?:-1:0)) //Non mi ricordo la
sintassi dell'operatore ma ci siam capiti, no? ;-)

....o no? ripeto, ci sta che non abbia ancora capito una mazza di quello di
cui hai bisogno Very Happy
--
---
Francesco Galli / Cinghiale Mannaro
Personal: http://cinghialemannaro.splinder.com
TMS project: http://tms.inera.it

"Davide Gurgone" <davide (AT) gurgone (DOT) it> ha scritto nel messaggio
news:1119862147.725847.103240 (AT) z14g2000cwz (DOT) googlegroups.com...
Quote:
[CUT]
(
:id_foto,
:foto,
:descrizione INDICATOR :descrizione_ind,
:file_name
);
[CUT]
D'accordo la sintassi, ma come referenzi la variabile? Anche in Delphi
c'e' una roba simile, ma non sono riuscito a riprodurla in java.

In delphi (pascal) si scrive:

nomeQuery.parameters.paramByName("foto").text = 'Nome della
fotografia';

Ma in java ho

PreparedStatement stmt = connection.getPreparedStatement(
"La mia query col parametro indicato come ? ");
stmt.setString(1, "valore del parametro"); // 1 e' la posizione del
parametro.


Tu come fai???




Back to top
Display posts from previous:   
Post new topic   Reply to topic    AppletTalk.com Forum Index -> Java (Italian) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.