1 22 package org.jboss.ejb.plugins.cmp.jdbc.keygen; 23 24 import java.sql.Connection ; 25 import java.sql.PreparedStatement ; 26 import java.sql.ResultSet ; 27 import java.sql.SQLException ; 28 import java.sql.Statement ; 29 import javax.ejb.EJBException ; 30 31 import org.jboss.deployment.DeploymentException; 32 import org.jboss.ejb.EntityEnterpriseContext; 33 import org.jboss.ejb.plugins.cmp.jdbc.JDBCIdentityColumnCreateCommand; 34 import org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager; 35 import org.jboss.ejb.plugins.cmp.jdbc.JDBCUtil; 36 import org.jboss.ejb.plugins.cmp.jdbc.SQLUtil; 37 import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCEntityCommandMetaData; 38 39 46 public class JDBCPostgreSQLCreateCommand extends JDBCIdentityColumnCreateCommand 47 { 48 private String sequence; 49 private String sequenceSQL; 50 51 public void init(JDBCStoreManager manager) throws DeploymentException 52 { 53 super.init(manager); 54 } 55 56 protected void initEntityCommand(JDBCEntityCommandMetaData entityCommand) throws DeploymentException 57 { 58 super.initEntityCommand(entityCommand); 59 sequence = entityCommand.getAttribute("sequence"); 60 if (sequence == null) { 61 sequence = entity.getQualifiedTableName() 62 + '_' + SQLUtil.getColumnNamesClause(pkField, new StringBuffer (20)) 63 + "_seq"; 64 } 65 sequenceSQL = "SELECT currval('"+sequence+"')"; 66 if (debug) { 67 log.debug("SEQUENCE SQL is :"+sequenceSQL); 68 } 69 } 70 71 protected int executeInsert(int index, PreparedStatement ps, EntityEnterpriseContext ctx) throws SQLException 72 { 73 int rows = ps.executeUpdate(); 74 75 Statement s = null; 76 ResultSet rs = null; 77 try { 78 if (trace) { 79 log.trace("Executing SQL :"+sequenceSQL); 80 } 81 Connection c = ps.getConnection(); 82 s = c.createStatement(); 83 rs = s.executeQuery(sequenceSQL); 84 if (!rs.next()) { 85 throw new EJBException ("sequence sql returned an empty ResultSet"); 86 } 87 pkField.loadInstanceResults(rs, 1, ctx); 88 } catch (RuntimeException e) { 89 throw e; 90 } catch (Exception e) { 91 throw new EJBException ("Error extracting generated keys", e); 93 } finally { 94 JDBCUtil.safeClose(rs); 95 JDBCUtil.safeClose(s); 96 } 97 98 return rows; 99 } 100 } 101 | Popular Tags |