 |
AppletTalk.com Java discussions newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Davide Gurgone Guest
|
Posted: Fri Jun 24, 2005 12:20 pm Post subject: [ORACLE] Sapere il tipo del parametro |
|
|
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
|
Posted: Fri Jun 24, 2005 1:29 pm Post subject: Re: [ORACLE] Sapere il tipo del parametro |
|
|
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
|
Posted: Fri Jun 24, 2005 2:56 pm Post subject: Re: Sapere il tipo del parametro |
|
|
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
|
Posted: Fri Jun 24, 2005 3:00 pm Post subject: Re: Sapere il tipo del parametro |
|
|
Io non ho capito molto bene cosa ti serve, pero' nella mia (scarsa)
conoscenza di Oracol 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
|
Posted: Fri Jun 24, 2005 3:38 pm Post subject: Re: Sapere il tipo del parametro |
|
|
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
|
Posted: Fri Jun 24, 2005 3:47 pm Post subject: Re: Sapere il tipo del parametro |
|
|
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
|
Posted: Mon Jun 27, 2005 8:49 am Post subject: Re: Sapere il tipo del parametro |
|
|
[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
|
Posted: Mon Jun 27, 2005 10:59 am Post subject: Re: Sapere il tipo del parametro |
|
|
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
--
---
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 |
|
 |
|
|
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
|
|