J'utilise Java pour faire des requêtes SQL.Java et prepareStatement avec MySQL
en général les questions que je veux effectuer sont:
set @uid=?; set @friendsList=?; IF EXISTS(select 1 from fb_user_friends join fb_user on " +
" fb_user.id = fb_user_friends.fb_user_id where [email protected]) then " +
"update fb_user_friends set friends = @friendsList; ELSE insert " +
"into fb_user_friends(fb_user_id,friends) values(@uid,@friendsList); END IF;
Je reçois la connexion MySQL à l'aide:
Class.forName("com.mysql.jdbc.Driver").newInstance();
this._sqlconn = DriverManager.getConnection(this._url,this._userName,this._password);
et je tente d'exécuter le code suivant:
String sql="set @uid=?; set @friendsList=?; IF EXISTS(select 1 from fb_user_friends join fb_user on " +
" fb_user.id = fb_user_friends.fb_user_id where [email protected]) then " +
"update fb_user_friends set friends = @friendsList; ELSE insert " +
"into fb_user_friends(fb_user_id,friends) values(@uid,@friendsList); END IF;";
try {
PreparedStatement stmt = this._sqlconn.prepareStatement(sql);
stmt.setLong(1,uid);
stmt.setString(2,StringUtils.join(friendsList.toArray(), ','));
stmt.executeUpdate();
}catch (SQLException e) ....
Je reçois l'exception:
class com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'set @friendsList='110633,2018837,6813007,8803501,10711399,500061635,500214841,50'
Est-ce que je ne peux pas exécuter plusieurs commandes avec prepareStatement?
Ai-je besoin de trouver une approche différente pour définir les variables MySQL uid et friendsList?
Merci!
Je pense que vous avez raison, merci! – ufk
J'ai résolu le problème en déplaçant ce code vers une procédure stockée. Merci beaucoup! – ufk