RE: JDBC + MySQL Datasource + Tomcat = ClassCastException

2003-07-22 Thread Mike Curwen
I'd drop the non-compliant way of getting this value, and use what's
provided by JDBC 3.0 (available with JDK 1.4.x and ConnectorJ 3.x)
 
statement.getGeneratedKeys()

No casting required.


http://www.mysql.com/articles/autoincrement-with-connectorj.html



 -Original Message-
 From: Joe Krause [mailto:[EMAIL PROTECTED] 
 Sent: Tuesday, July 22, 2003 2:49 PM
 To: '[EMAIL PROTECTED]'
 Subject: JDBC + MySQL Datasource + Tomcat = ClassCastException
 
 
 Hi Folks, I am trying to recast the JDBC Statement object 
 that is given to me from a Connection object that I get out 
 of Tomcat's datasource connection pool. If I recast the 
 generic java.sql.Statement to a com.mysql.jdbc.Statment, I 
 can use the non JDBC compliant methods such as 
 getLastInsertID. When I do this in a test class using 
 standard JDBC, it works perfectly. But when I try to do this 
 from a connection object that is retrived from tomcat's 
 connection pool, I get a ClassCastException. Does the 
 datasource mechanism alter the connection somehow so that it 
 would no longer give me com.mysql.jdbc.Statment objects, but 
 some other kind?
 
  
 
 Here's the code that works...
 
  
 
 Class.forName(com.mysql.jdbc.Driver);
 
 Connection con = 
 DriverManager.getConnection(:mysql://jedi.x:3306/vegas?autoRec
 onnect=true,
 username, password);
 
 
 
 Statement stmt = con.createStatement();
 
 stmt.executeUpdate(INSERT INTO role VALUES 
 (null, 'test', '123'));
 
 
 
 com.mysql.jdbc.Statement m = 
 (com.mysql.jdbc.Statement) stmt;
 
 long id = m.getLastInsertID();
 
  
 
 Here's the code that doesn't work:
 
  
 
 Context ctx = new InitialContext();
 
 DataSource ds = 
 (DataSource)ctx.lookup(java:comp/env/jdbc/vegas);
 
 Connection con = ds.getConnection();
 
 
 
 Statement stmt = con.createStatement();
 
 stmt.executeUpdate(INSERT INTO role VALUES 
 (null, 'test', '123'));
 
 
 
 com.mysql.jdbc.Statement m = 
 (com.mysql.jdbc.Statement) stmt;
 
 long id = m.getLastInsertID();
 
  
 
 I should note that other than this, everything works fine 
 with the datasource. Its configured properly (I think) and I 
 can fully access the database in all respects.
 
  
 
 I am using:
 
 Tomcat 4.1.24
 
 Linux 2.4.20
 
 Mysql 4.0.13
 
 Java 1.4.1.03
 
 Mysql Connector/J 3.0.8
 
  
 
 Thanks For the help!
 
  
 
 Joe Krause
 
  
 
 


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



RE: JDBC + MySQL Datasource + Tomcat = ClassCastException

2003-07-22 Thread Joe Krause
Ok - implemented the getGeneratedKeys() method and everything works great. 

Thank you very much Mike!

On another topic, is there any quick way to determine the total rows
returned in a ResultSet without stepping through it. I want to build array's
or objects and I need to know in advance what the array dimension will be. I
could use lists, but I'd rather use array's. Here's what I came up with:

ResultSet rs = ps.executeQuery();  
rs.last();
int total = rs.getRow();
rs.beforeFirst();

When I get the resultset, I go to the last row, get its number, and then
reset the resultset cursor back to before the first row. Is there already a
method to give me this data? I looked but couldn't find any...

Joe

-Original Message-
From: Mike Curwen [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, July 22, 2003 1:05 PM
To: 'Tomcat Users List'
Subject: RE: JDBC + MySQL Datasource + Tomcat = ClassCastException

I'd drop the non-compliant way of getting this value, and use what's
provided by JDBC 3.0 (available with JDK 1.4.x and ConnectorJ 3.x)
 
statement.getGeneratedKeys()

No casting required.


http://www.mysql.com/articles/autoincrement-with-connectorj.html



 -Original Message-
 From: Joe Krause [mailto:[EMAIL PROTECTED] 
 Sent: Tuesday, July 22, 2003 2:49 PM
 To: '[EMAIL PROTECTED]'
 Subject: JDBC + MySQL Datasource + Tomcat = ClassCastException
 
 
 Hi Folks, I am trying to recast the JDBC Statement object 
 that is given to me from a Connection object that I get out 
 of Tomcat's datasource connection pool. If I recast the 
 generic java.sql.Statement to a com.mysql.jdbc.Statment, I 
 can use the non JDBC compliant methods such as 
 getLastInsertID. When I do this in a test class using 
 standard JDBC, it works perfectly. But when I try to do this 
 from a connection object that is retrived from tomcat's 
 connection pool, I get a ClassCastException. Does the 
 datasource mechanism alter the connection somehow so that it 
 would no longer give me com.mysql.jdbc.Statment objects, but 
 some other kind?
 
  
 
 Here's the code that works...
 
  
 
 Class.forName(com.mysql.jdbc.Driver);
 
 Connection con = 
 DriverManager.getConnection(:mysql://jedi.x:3306/vegas?autoRec
 onnect=true,
 username, password);
 
 
 
 Statement stmt = con.createStatement();
 
 stmt.executeUpdate(INSERT INTO role VALUES 
 (null, 'test', '123'));
 
 
 
 com.mysql.jdbc.Statement m = 
 (com.mysql.jdbc.Statement) stmt;
 
 long id = m.getLastInsertID();
 
  
 
 Here's the code that doesn't work:
 
  
 
 Context ctx = new InitialContext();
 
 DataSource ds = 
 (DataSource)ctx.lookup(java:comp/env/jdbc/vegas);
 
 Connection con = ds.getConnection();
 
 
 
 Statement stmt = con.createStatement();
 
 stmt.executeUpdate(INSERT INTO role VALUES 
 (null, 'test', '123'));
 
 
 
 com.mysql.jdbc.Statement m = 
 (com.mysql.jdbc.Statement) stmt;
 
 long id = m.getLastInsertID();
 
  
 
 I should note that other than this, everything works fine 
 with the datasource. Its configured properly (I think) and I 
 can fully access the database in all respects.
 
  
 
 I am using:
 
 Tomcat 4.1.24
 
 Linux 2.4.20
 
 Mysql 4.0.13
 
 Java 1.4.1.03
 
 Mysql Connector/J 3.0.8
 
  
 
 Thanks For the help!
 
  
 
 Joe Krause
 
  
 
 


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


RE: JDBC + MySQL Datasource + Tomcat = ClassCastException

2003-07-22 Thread Mike Curwen
I've also wished for this, but I think the 'last, grab, first' two-step
is the only way to do this.. and of course, only with JDBC 3.0
Scrollable ResultSets (or maybe that was available back in JDBC2).
 
The only other way I can think of is to construct a query exactly the
same as the one you are running, except replace the SELECT clause with
SELECT COUNT(*). Run this once, either before or after your 'real'
query.  Of course this isn't so great for cases where someone else
inserts a dozen rows between your two queries. 


 -Original Message-
 From: Joe Krause [mailto:[EMAIL PROTECTED] 
 Sent: Tuesday, July 22, 2003 4:10 PM
 To: 'Tomcat Users List'
 Subject: RE: JDBC + MySQL Datasource + Tomcat = ClassCastException
 
 
 Ok - implemented the getGeneratedKeys() method and everything 
 works great. 
 
 Thank you very much Mike!
 
 On another topic, is there any quick way to determine the 
 total rows returned in a ResultSet without stepping through 
 it. I want to build array's or objects and I need to know in 
 advance what the array dimension will be. I could use lists, 
 but I'd rather use array's. Here's what I came up with:
 
 ResultSet rs = ps.executeQuery();  
 rs.last();
 int total = rs.getRow();
 rs.beforeFirst();
 
 When I get the resultset, I go to the last row, get its 
 number, and then reset the resultset cursor back to before 
 the first row. Is there already a method to give me this 
 data? I looked but couldn't find any...
 
 Joe
 
 -Original Message-
 From: Mike Curwen [mailto:[EMAIL PROTECTED] 
 Sent: Tuesday, July 22, 2003 1:05 PM
 To: 'Tomcat Users List'
 Subject: RE: JDBC + MySQL Datasource + Tomcat = ClassCastException
 
 I'd drop the non-compliant way of getting this value, and use 
 what's provided by JDBC 3.0 (available with JDK 1.4.x and 
 ConnectorJ 3.x)
  
 statement.getGeneratedKeys()
 
 No casting required.
 
 
 http://www.mysql.com/articles/autoincrement-with-connectorj.html
 
 
 
  -Original Message-
  From: Joe Krause [mailto:[EMAIL PROTECTED]
  Sent: Tuesday, July 22, 2003 2:49 PM
  To: '[EMAIL PROTECTED]'
  Subject: JDBC + MySQL Datasource + Tomcat = ClassCastException
  
  
  Hi Folks, I am trying to recast the JDBC Statement object
  that is given to me from a Connection object that I get out 
  of Tomcat's datasource connection pool. If I recast the 
  generic java.sql.Statement to a com.mysql.jdbc.Statment, I 
  can use the non JDBC compliant methods such as 
  getLastInsertID. When I do this in a test class using 
  standard JDBC, it works perfectly. But when I try to do this 
  from a connection object that is retrived from tomcat's 
  connection pool, I get a ClassCastException. Does the 
  datasource mechanism alter the connection somehow so that it 
  would no longer give me com.mysql.jdbc.Statment objects, but 
  some other kind?
  
   
  
  Here's the code that works...
  
   
  
  Class.forName(com.mysql.jdbc.Driver);
  
  Connection con =
  DriverManager.getConnection(:mysql://jedi.x:3306/vegas?autoRec
  onnect=true,
  username, password);
  
  
  
  Statement stmt = con.createStatement();
  
  stmt.executeUpdate(INSERT INTO role VALUES
  (null, 'test', '123'));
  
  
  
  com.mysql.jdbc.Statement m =
  (com.mysql.jdbc.Statement) stmt;
  
  long id = m.getLastInsertID();
  
   
  
  Here's the code that doesn't work:
  
   
  
  Context ctx = new InitialContext();
  
  DataSource ds =
  (DataSource)ctx.lookup(java:comp/env/jdbc/vegas);
  
  Connection con = ds.getConnection();
  
  
  
  Statement stmt = con.createStatement();
  
  stmt.executeUpdate(INSERT INTO role VALUES
  (null, 'test', '123'));
  
  
  
  com.mysql.jdbc.Statement m =
  (com.mysql.jdbc.Statement) stmt;
  
  long id = m.getLastInsertID();
  
   
  
  I should note that other than this, everything works fine
  with the datasource. Its configured properly (I think) and I 
  can fully access the database in all respects.
  
   
  
  I am using:
  
  Tomcat 4.1.24
  
  Linux 2.4.20
  
  Mysql 4.0.13
  
  Java 1.4.1.03
  
  Mysql Connector/J 3.0.8
  
   
  
  Thanks For the help!
  
   
  
  Joe Krause
  
   
  
  
 
 
 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]
 


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]