Thanks Paul for all of the clarifications Actually what I was saying was this:
I obviously didn't assume that sticking a semi-colon between statements creates a transaction. I was leaving out the transaction/table lock statements but I meant to illustrate that for instance: LOCK TABLES Orders WRITE; SELECT @a:=MAX(Number) FROM Orders; INSERT INTO Orders (...) VALUES (..., @a+1); UNLOCK TABLES; Traditionally this is executed in one statement. So your translation is: try { Statement s = conn.createStatement (); s.execute ("LOCK TABLES Orders WRITE"); s.executeQuery ("SELECT @a:=MAX(Number) FROM Orders"); s.executeUpdate ("INSERT INTO Orders (...) VALUES (..., @a+1);"); s.execute ("UNLOCK TABLES"); s.close (); } catch (SQLException e) { } Would work as expected? (Ignoring the obvious invalidity of my Insert statement). The lock would occur on the statements and the insert would get the value of the select? Thanks a lot for your help this should be a winner. -Allon On 3/19/02 5:40 PM, "Paul DuBois" <[EMAIL PROTECTED]> wrote: > At 16:45 -0800 3/19/02, Allon Bendavid wrote: >> Hi All- >> >> We are using the mm driver for MySQL and multiple statements in one >> connection do not seem to be supported: > > No. Multiple statements in one *string* are not supported, in the MM.MySQL > or any other API. The client-server protocol supports sending only one > statement to the server at a time. > > Multiple statements per connection are supported. > >> >> I.e. >> >> SELECT @a:=MAX(Number) FROM Orders;insert into orders (Number) values (@a+1) >> >> >> The driver throws a syntax error. You can do either one of these statements >> on their own, and you can have a semicolon in the statement, but you cannot >> combine the statements. > > Putting a semicolon in the statement is wrong in any case. It may work > by coincidence, but you'll certainly find that trying that in other APIs > will cause big problems. Semicolons are a convention of the mysql client > program; don't carry them into your own programming. > >> >> Are we missing something? >> >> How would you do a transaction or table lock without multi statement >> support? > > Huh? > > I'm curious why you'd think that the ability to stick a semicolon between > two statements would give you a transaction. That's certainly not true > in mysql. > > If you want to issue multiple statements with the same connection, then > just invoke execute(), executeQuery(), or executeUpdate() as necessary > while your connection is active. If you want them within a transaction, > use your connection object to set the autocommit mode, and the commit() > and rollback() methods. > > try > { > conn.setAutoCommit (false); > try > { > Statement s = conn.createStatement (); > // move some money from one person to the other > s.executeUpdate ("UPDATE money SET amt = amt - 6 WHERE name = 'Eve'"); > s.executeUpdate ("UPDATE money SET amt = amt + 6 WHERE name = 'Ida'"); > s.close (); > conn.commit (); > } > catch (SQLException e) > { > System.err.println ("Transaction failed, rolling back."); > Cookbook.printErrorMessage (e); > // empty exception handler in case rollback fails > try { conn.rollback (); } catch (Exception e2) { } > } > conn.setAutoCommit (true); > } > catch (Exception e) > { > System.err.println ("Cannot perform transaction"); > Cookbook.printErrorMessage (e); > } > > >> >> -Allon >> >> >> ---------------------------------------------------------------------------- >> Allon Bendavid Imacination Software >> [EMAIL PROTECTED] http://www.imacination.com/ >> 805-650-8153 >> ---------------------------------------------------------------------------- >> Visit Imacination and start selling on the Web today with Ch-Ching! >> ---------------------------------------------------------------------------- > ---------------------------------------------------------------------------- Allon Bendavid Imacination Software [EMAIL PROTECTED] http://www.imacination.com/ 805-650-8153 ---------------------------------------------------------------------------- Visit Imacination and start selling on the Web today with Ch-Ching! ---------------------------------------------------------------------------- --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php