ufk
ufk

Reputation: 32094

Java and prepareStatement with MySQL

I use Java to do some SQL queries.

in general the queries that i want to perform are:

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 uid=@uid)  then " +
              "update fb_user_friends set friends = @friendsList; ELSE insert " +
              "into fb_user_friends(fb_user_id,friends) values(@uid,@friendsList); END IF;

I get the MySQL Connection using:

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

and I try to execute the following code:

  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 uid=@uid)  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) ....

I get the 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'

can't I run several commands with prepareStatement ?

Do i need to find a different approach to set the MySQL variables uid and friendsList?

Thanks!

Upvotes: 0

Views: 224

Answers (1)

Kurt Du Bois
Kurt Du Bois

Reputation: 7655

That looks a bit like a mysql stored procedure to me? If I'm not mistaken, you should register that in mysql directly. That way, you're able to call it using your prepared statement.

Upvotes: 1

Related Questions