Conexão JDBC 2 Bcos
Bom dia,
Preciso montar um programa que pega informações de um banco e as inclua em outro. Pra isso estou montando uma classe que faz 2 conexões conforme abaixo, só que sempre dá erro quando entro no loop que faz o insert das informações lidas na primeira conexão dá o erro:
Advertência: EJB5184:A system exception occurred during an invocation on EJB ClienteBean, method: public void br.com.bi.bean.ClienteBean.integrar()
Advertência: javax.ejb.EJBTransactionRolledbackException
at com.sun.ejb.containers.BaseContainer.mapLocal3xException(BaseContainer.java:2279)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2060)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1979)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:220)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
at com.sun.proxy.$Proxy1840.integrarCliente(Unknown Source)
at br.com.bi.dao.__EJB31_Generated__ClienteDao__Intf____Bean__.integrarContratantes(Unknown Source)
@Stateless
public class ClienteDao {
private List<Cliente> toReturn;
public void integrarContratantes() {
try {
DatabaseUtil db = new DatabaseUtil();
DatabaseUtil db2 = new DatabaseUtil();
PreparedStatement smtp = null;
Connection cx = db.getConnection("ClienteOrigem");
smtp = (PreparedStatement) cx.prepareStatement("SELECT codigo, cgc, nome FROM cliente");
ResultSet rs = smtp.executeQuery();
int i = 0;
Connection conn = db2.getConnection("ClienteDestino");
PreparedStatement smtp2 = (PreparedStatement) conn.prepareStatement("INSERT INTO cliente(codigo, cgc, nome) values (?, ?, ?)");
conn.setAutoCommit(false);
i = 0;
while (rs.next()) {
smtp2.setInt(1, rs.getInt(1));
smtp2.setInt(2, rs.getInt(2));
smtp2.setString(3, rs.getString(3));
smtp2.addBatch();
i++;
if (i > 2000) {
smtp2.executeBatch();
conn.commit();
i = 0;
}
}
if (i > 0) {
smtp2.executeBatch();
conn.commit();
i = 0;
}
smtp.close();
cx.close();
smtp2.close();
conn.close();
} catch (SQLException ex) {
Logger.getLogger(ContratanteGPSDao.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Preciso montar um programa que pega informações de um banco e as inclua em outro. Pra isso estou montando uma classe que faz 2 conexões conforme abaixo, só que sempre dá erro quando entro no loop que faz o insert das informações lidas na primeira conexão dá o erro:
Advertência: EJB5184:A system exception occurred during an invocation on EJB ClienteBean, method: public void br.com.bi.bean.ClienteBean.integrar()
Advertência: javax.ejb.EJBTransactionRolledbackException
at com.sun.ejb.containers.BaseContainer.mapLocal3xException(BaseContainer.java:2279)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2060)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1979)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:220)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
at com.sun.proxy.$Proxy1840.integrarCliente(Unknown Source)
at br.com.bi.dao.__EJB31_Generated__ClienteDao__Intf____Bean__.integrarContratantes(Unknown Source)
@Stateless
public class ClienteDao {
private List<Cliente> toReturn;
public void integrarContratantes() {
try {
DatabaseUtil db = new DatabaseUtil();
DatabaseUtil db2 = new DatabaseUtil();
PreparedStatement smtp = null;
Connection cx = db.getConnection("ClienteOrigem");
smtp = (PreparedStatement) cx.prepareStatement("SELECT codigo, cgc, nome FROM cliente");
ResultSet rs = smtp.executeQuery();
int i = 0;
Connection conn = db2.getConnection("ClienteDestino");
PreparedStatement smtp2 = (PreparedStatement) conn.prepareStatement("INSERT INTO cliente(codigo, cgc, nome) values (?, ?, ?)");
conn.setAutoCommit(false);
i = 0;
while (rs.next()) {
smtp2.setInt(1, rs.getInt(1));
smtp2.setInt(2, rs.getInt(2));
smtp2.setString(3, rs.getString(3));
smtp2.addBatch();
i++;
if (i > 2000) {
smtp2.executeBatch();
conn.commit();
i = 0;
}
}
if (i > 0) {
smtp2.executeBatch();
conn.commit();
i = 0;
}
smtp.close();
cx.close();
smtp2.close();
conn.close();
} catch (SQLException ex) {
Logger.getLogger(ContratanteGPSDao.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Ricardo Pestana
Curtidas 0