Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Mike Lewis on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Prepared Statement and select max id issue

Status
Not open for further replies.

dreampolice

Technical User
Dec 20, 2006
85
US
I have a method that has a prepared statement that executes before a SQL select max id query. The Prepared statement works great where I call it in another method in my Java Helper Class file.

Now I want to move the method with the prepared statement into another class and call in in my Java Helper Class.

For some reason it didnt work. Here is what it looked like with both methods in one class and everything working great with my Access 2003 database where the prepared statement runs and then I get the max id from the table:
Code:
public class HelperDB {
...
PreparedStatement ps = null;
public int insertData(MyBean poc)
{
   int status = 0;
   try {
       ps = connection.prepareStatement("Insert into tableone (firstname,lastname) values (?,?)");
       ps.setString(1,poc.getFirstname());
       ps.setString(1,poc.getLastname());
       ps.executeUpdate();
   }
   catch(Exception e)
   {
       e.printStackTrace();
   }
   return status;
}

public thehit(MyBean user)
{
Statement statement = null;
ResultSet rs = null;
...
insertData(user);
rs = statement.executeQuery("select max(tableoneId) from tableone");
rs.next();
int myId = rs.getInt(1);
String query = "insert into tabletwo (city, tableoneid) values ('" + user.getCity()) + "','" + myId + "')";
statement.executeUpdate(query);
...


Now if I put the insertData method in another class and call it in the HelperDB class it will correctly insert data into tableone but it doesnt retrieve the correct max tableoneid value.

Code:
public class AnotherHelper {
...
PreparedStatement ps = null;
public int insertData(MyBean poc)
{
   int status = 0;
   try {
       ps = connection.prepareStatement("Insert into tableone (firstname,lastname) values (?,?)");
       ps.setString(1,poc.getFirstname());
       ps.setString(1,poc.getLastname());
       ps.executeUpdate();
   }
   catch(Exception e)
   {
       e.printStackTrace();
   }
   return status;
}

Code:
public class HelperDB {
...
PreparedStatement ps = null;
public thehit(MyBean user)
{
Statement statement = null;
ResultSet rs = null;
...
new AnotherHelper().insertData(user);
rs = statement.executeQuery("select max(tableoneId) from tableone");
rs.next();
int myId = rs.getInt(1);
String query = "insert into tabletwo (city, tableoneid) values ('" + user.getCity()) + "','" + myId + "')";
statement.executeUpdate(query);
...

It seems like the the object new AnotherHelper().insertData(user) runs after the select max sql statement (select max(tableoneId) from tableone) because I always get the second to last max value in tableone. Please advise.
 
i am not sure if i understand it correctly but perhaps you wanna try "synchronized
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top