-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Tea Yu wrote:
Hi there!



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Tea Yu wrote:

Hi!  I just tried
   Windows ME + MySQL Server - 4.0.9/4.0.11 +
   ConnectorJ - 3.0.4/3.0.6/3.1.0

with an InnoDB table
   test (id bigint not null auto_increment, name varchar(255))
also tried
   test (id int not null auto_increment, name varchar(255))

and did an SQLQuery thru JDBC
   insert into TABLE (name) values ('test');
   select last_insert_id() from TABLE;

but got the Exception
   java.sql.SQLException: Invalid value for getInt() - 'q'

while successive running of program returns
   'r', 's', 't'...

Query from console returns the correct result, but it returns n rows in

set


if last_insert_id() is n
e.g. if select last_insert_id() = 7, 7 rows are returned in set


Is there a bug in ConnectorJ regarding this... seems nobody else is

having


such a problem...?


I can't reproduce this error with the following test:

public void testLastInsertId() throws Exception {
   try {
   stmt.executeUpdate("DROP TABLE IF EXISTS lastInsertTest");
stmt.executeUpdate("CREATE TABLE lastInsertTest (id bigint not null
auto_increment primary key, name varchar(255))");
stmt.executeUpdate("INSERT INTO lastInsertTest (name) values ('test')");
rs = stmt.executeQuery("SELECT LAST_INSERT_ID() FROM lastInsertTest");
rs.next();
rs.getInt(1);


} finally { stmt.executeUpdate("DROP TABLE IF EXISTS lastInsertTest"); } }

However, your SQL is a little funny, for example you can't create a
table using the SQL you give, as AUTO_INCREMENT columns also have to be
the primary key. Also, you call the table 'test', but then refer to it
as 'TABLE' when doing your SELECT_LAST_INSERT_ID()...so hopefully these
are cut-and-paste errors, otherwise it seems you are not creating the
queries you think you are.


Sorry, cause I didn't copy-n-paste those so there were typos, actually I
created the table in console:

1) create table test (id INTEGER NOT NULL AUTO_INCREMENT, name VARCHAR(255),
primary key (id));

2) here is the code segment

  String insertStmt = "insert into test (name) values ('hi')";
  String queryStmt = "select last_insert_id()";

  try {
   stmt.executeUpdate(insertStmt);
   ResultSet rs = stmt.executeQuery(queryStmt);
   if(rs.next())
    System.out.println("last insert id: " + rs.getInt(1));
  } catch (SQLException e) {
   System.out.println(e);
  }

if
a) I comment out the rs.getInt(1) line, no exception throws... else it
throws something like
    java.sql.SQLException: Invalid value for getInt() - 't'
b) if I use getString(1) instead, no exception throws...
    but it returns "t", "u" or something

3) I tried to insert records thru MySQLCC without errors.

More thoughts?

Regards
Tea

The only thing I can guess (because my testsuite is really the same code, I just don't store the queries in variables), is that 'queryStmt' does not hold the query you think it does. Try inspecting it in a debugger or printing it out before you execute the query, to see what query you are really executing.


-mark


- -- MySQL 2003 Users Conference -> http://www.mysql.com/events/uc2003/


For technical support contracts, visit https://order.mysql.com/?ref=mmma

    __  ___     ___ ____  __
   /  |/  /_ __/ __/ __ \/ /  Mark Matthews <[EMAIL PROTECTED]>
  / /|_/ / // /\ \/ /_/ / /__ MySQL AB, Full-Time Developer - JDBC/Java
 /_/  /_/\_, /___/\___\_\___/ Flossmoor (Chicago), IL USA
        <___/ www.mysql.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.1.90 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQE+X4FptvXNTca6JD8RAmbvAKCSP6jENF9/DlJQrdTulDmC6A5BsACeOVGS
dobDs9BgnVxc2zTxSV18B9k=
=x4ct
-----END PGP SIGNATURE-----


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



Reply via email to