2012-05-18 6 views
0

Моя проблема в том, что я установил таблицу auto commit false. Мне нужно получить максимальный id из этой таблицы (в настоящее время вставленное значение auto increment id). Но я получаю идентификатор предыдущего совершенного процесса. Можно ли получить значениеМаксимальное значение из автоматической фиксации ложной таблицы

Моя реальная проблема: мне нужно вставить в таблицу некоторые значения, и нужно взять идентификатор последней вставленной записи из первой таблицы и вставить ее во вторую. Вторая вставка включает в себя некоторую загрузку изображения (как часть кода). поэтому он требует некоторой задержки или может иметь исключения. Мне нужно отменить все вставки (как в первом, так и вторые), если возникнут какие-либо исключения. Для этого я попытался использовать метод обратной привязки. Но он не работает должным образом, как я упоминал выше. Основная часть моего кода написано ниже

try 
{ 

//getting connection and setting auto commit false 
dbHandler dbGetConnect=new dbHandler(); 
Connection conRegPlot=null; 
conRegPlot=dbGetConnect.getconn(); 
conRegPlot.setAutoCommit(false); 


String qryInsertPlot="INSERT INTO property_table(name,message,owner,locality,lattitude,longitude,country,state,city,type,catagory,created,modified,creted_date,zoompoint,mob_no,title,img_path,expire_date,lease_term) VALUES('none','"+description+"','"+sessionUserId+"','"+locality+"','"+lattitude+"','"+longitude+"','"+country+"','"+state+"','"+city+"','"+type+"','"+catagory+"',NOW(),NOW(),CURDATE(),'"+zoom+"','"+mob_no+"','"+title+"','NOT IN USE',"+expireDate+",'"+termsAndConditions+"')";//insertion into the first table 

Statement stCrs=conRegPlot.createStatement(); 
int resp=stCrs.executeUpdate(qryInsertPlot); 

String qryGetMaxProperty="SELECT MAX(l_id)"+ 
     " FROM property_table"+ 
      " WHERE stat='active'"+ 
      " AND CURDATE()<=expire_date"; 
propertyId1=dbInsertPropert.returnSingleValue(qryGetMaxProperty);// get the max id 


String qryInsertImage="INSERT INTO image_table(plot_id,ownr_id,created_date,created,modified,stat,img_path) VALUES('"+propertyId1+"','"+sessionUserId+"',CURDATE(),NOW(),NOW(),'active','"+img_pth+"')"; 

      Statement stImg=conRegPlot.createStatement(); 
      stImg.executeUpdate(qryInsertImage);// inserting the image 


conRegPlot.commit();  
} 
catch(Exception exc) 
{ 
    conRegPlot.rollback(); 

} 
finally{ 
    conRegPlot.close(); 
} 
+0

Этот сайт должен называться * SQL Injection *, а не * Переполнение стека *. Кто-нибудь избегает того, что они вкладывают в свои SQL-заявления? – tadman

ответ

1

С

И нужно взять идентификатор последней вставленной записи из первой таблицы и вставить его на второй.

Вы могли бы использование нового метода JDBC 3.0getGeneratedKeys() для получения сгенерированного ID. В поле «ahother» вы должны использовать PreparedStatement, чтобы избежать SQL-инъекций.

PreparedStatement ps = null; 
try { 
    conn = getConnection(); 
    ps = conn.prepareStatement(myQuery, PreparedStatement.RETURN_GENERATED_KEYS); 
    ps.setInt(1, anInteger); 
    ... 
    int rows = ps.executeUpdate(); 
    if (rows == 1) { 
     ResultSet keysRS = ps.getGeneratedKeys(); 
     if (keysRS.next()) 
      int id = keysRS.getInt(1) // Get generated id 

Для MySQL, смотрите в http://dev.mysql.com/doc/refman/5.1/en/connector-j-usagenotes-last-insert-id.html#connector-j-examples-autoincrement-getgeneratedkeys

+0

большое спасибо за ваш ответ, он работает для меня. и я попытаюсь использовать подготовленное заявление – arjuncc

Смежные вопросы