2010-08-05 2 views
0

Я использую Java для выполнения некоторых SQL-запросов.Java и prepareStatement с MySQL

в целом запросы, которые я хочу, чтобы выполнить следующие:

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; 

Я получаю подключение MySQL с помощью:

  Class.forName("com.mysql.jdbc.Driver").newInstance(); 
      this._sqlconn = DriverManager.getConnection(this._url,this._userName,this._password); 

и я пытаюсь выполнить следующий код:

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) .... 

Получалось исключение:

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' 

Не могу запустить несколько команд с помощью prepareStatement?

Нужно ли мне найти другой подход для установки переменных MySQL uid и friendsList?

Спасибо!

ответ

1

Это похоже на хранимую процедуру mysql для меня? Если я не ошибаюсь, вы должны зарегистрировать это непосредственно в mysql. Таким образом, вы можете вызвать его, используя подготовленное заявление.

+0

Я думаю, что вы правы, спасибо! – ufk

+0

Я решил проблему, переместив этот код в хранимую процедуру. большое спасибо! – ufk

Смежные вопросы