Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème de String entre Java et SQL

6 réponses
Avatar
yvon.thoravalNO-SPAM
J'ai un problème bizarre :

si, dans une requête sql je fais :

sql = "select MAX(loc_id) from t_locations_loc ;";

j'ai un RésultSet non null

par contre si je construit "loc_id" à partir de "t_locations_loc" par :
String table = "t_locations_loc"
String[] locAry = table.split("_");
String locId = locAry[locAry.length - 1] + "_id";
sql = "select MAX(" + locId + ") from " + table + " ;";

et là un résultat null même en ajoutant des blancs ou des ' autour de
locId et/ou table, par ex :

sql = "select MAX( '" + locId + "' ) from '" + table + "' ;";

je ne vois pas du tout où est le problème...
--
yt

6 réponses

Avatar
Fabrice News
Salut,
Le plus simple aurait été que tu affiches ta variable enfin bref vu ton code
la varible locId = locations_id et non loc_id d'après ta requete...
Tu obtiens donc select MAX(locations_id) from t_locations_loc ;";


"Yvon Thoraval" a écrit dans le message de
news: 1gdwdob.9hiprc1q6sutcN%
J'ai un problème bizarre :

si, dans une requête sql je fais :

sql = "select MAX(loc_id) from t_locations_loc ;";

j'ai un RésultSet non null

par contre si je construit "loc_id" à partir de "t_locations_loc" par :
String table = "t_locations_loc"
String[] locAry = table.split("_");
String locId = locAry[locAry.length - 1] + "_id";
sql = "select MAX(" + locId + ") from " + table + " ;";

et là un résultat null même en ajoutant des blancs ou des ' autour de
locId et/ou table, par ex :

sql = "select MAX( '" + locId + "' ) from '" + table + "' ;";

je ne vois pas du tout où est le problème...
--
yt


Avatar
Vincent Brabant

J'ai un problème bizarre :

si, dans une requête sql je fais :

sql = "select MAX(loc_id) from t_locations_loc ;";

j'ai un RésultSet non null

par contre si je construit "loc_id" à partir de "t_locations_loc" par :
String table = "t_locations_loc"
String[] locAry = table.split("_");
String locId = locAry[locAry.length - 1] + "_id";
sql = "select MAX(" + locId + ") from " + table + " ;";

et là un résultat null même en ajoutant des blancs ou des ' autour de
locId et/ou table, par ex :

sql = "select MAX( '" + locId + "' ) from '" + table + "' ;";

je ne vois pas du tout où est le problème...


peut-on voir le reste du code, c'est à dire l'endroit où tu construit le
statement, où gères ton résultset, ...

--
Vincent Brabant
----------------
http://www.netbeans.org/index_fr.html
http://vbrabant-fr.skynetblogs.be

Avatar
yvon.thoravalNO-SPAM
Fabrice News wrote:

Le plus simple aurait été que tu affiches ta variable enfin bref vu ton code
la varible locId = locations_id et non loc_id d'après ta requete...
Tu obtiens donc select MAX(locations_id) from t_locations_loc ;";


Ben non, quand même, j'obtiens bien la même string...
--
yt

Avatar
yvon.thoravalNO-SPAM
Vincent Brabant wrote:


peut-on voir le reste du code, c'est à dire l'endroit où tu construit le
statement, où gères ton résultset, ...


oui, je lis le ResultSet et :
query = conn.createStatement();
String sql = "SELECT " + flds + " FROM " + t;
sql += ("".equals(this.w))? " " : " WHERE " + this.w + " ";
sql += ("".equals(this.oby))? " ;" : " ORDER BY " + this.oby + " ;";
rs = query.executeQuery(sql);
rsmd = rs.getMetaData();
for (int i = 0; i < s; i++) {
fieldsClass.add(rsmd.getColumnClassName(i + 1));
}
while(rs.next()) {
Vector rsv = new Vector();
for (int i = 0; i < s; i++) {
rsv.add(setFieldClass(f_.get(i), rs.getObject(i + 1),
rsmd.getColumnClassName(i + 1)));
}
datas.add(rsv);
}
rs.close();
query.close();

--
yt

Avatar
Jean Bernard Root
String sql = "SELECT " + flds + " FROM " + t;
sql += ("".equals(this.w))? " " : " WHERE " + this.w + " ";
sql += ("".equals(this.oby))? " ;" : " ORDER BY " + this.oby + " ;";


Franchement, si c'est pour faire autre chose que jouer, je vous
conseille de laisser tomber tout de suite, et d'utiliser des framework
comme hibernate pour gérer la persistence. Le cout d'adoption et
d'apprentissage peut-être assez elevé, mais c'est très payant sur le
long terme.

Vous serez très heureux dans quelques mois quand vous aurez à replonger
là-dedans pour trouver un bug :-/ Je parle d'expérience ...

Vous allez tomber sur des problèmes très épineux qui ont été résolus par
ces frameworks depuis fort longtemps et de façon très élégante.

- performance : prepared statements
- collections d'instances "feinéantes" : on ne prend dans la base que ce
dont on a besoin, et pas les 100000 lignes de la table de relation entre
"factures" et "lignes de commande"
- portabilité inter-bases
- ...

Avatar
yvon.thoravalNO-SPAM
Jean Bernard Root wrote:


Franchement, si c'est pour faire autre chose que jouer, je vous
conseille de laisser tomber tout de suite, et d'utiliser des framework
comme hibernate pour gérer la persistence. Le cout d'adoption et
d'apprentissage peut-être assez elevé, mais c'est très payant sur le
long terme.


Merci beaucoup du conseil, j'apprécie d'autant que c'est qqc que
j'envisage, j'ai déjà qq essais, cependant, il faudra bien que je migre
ma base et, pour le faire au mieux, je dois finir ce que j'ai commencé,
au moins je saurai quoi mettre dans hibernate ou autre...

Basiquement, dans le cas que je soulevais, je ne pige pas pourquoi :

sql = "SELECT MAX(mon_id) FROM ma_table";
marche impec ;
String ma_table = "cette_table_la";
sql = "SELECT MAX(mon_id) FROM" + ma_table;
marche impec aussi;
MAIS :
String mon_id = "cet_id_la";
sql = "SELECT MAX(" + mon_id + ") FROM" + ma_table;
Me retourne un ResultSet vide et donc sans erreur...

Bon, hibernate je ne connais pas, j'ai commencé de regarder Ozone pour
la persistance...
=> 100% java + de "SQL" mais OQL...


--
yt