Bom dia, gostaria da ajuda de vcs para resolver um problema.
Tenho uma tabela Conta
private Integer cdEmpresa;
private Integer cdConta;
private Integer cdNivelPlano;
private Integer cdGrupoConta;
private Integer cdReduzido;
private String cdContaContabil;
private String nmConta;
private Integer cdContaPai;
private String flContaAtiva;
private String flBalanco;
private String flRateio;
private Character flRedutora;
Estou lendo uma planilha do excel para criar os objetos e inserir no banco da dados.
1 ATIVO
11 ATIVO CIRCULANTE
111 DISPONIVEL
111.01 CAIXA GERAL
111.01.0001 CAIXA OBRA HOSP. BOTUCATU
111.01.0005 CAIXA ENGENHARIA
111.01.0006 CAIXA FINANCEIRO
111.01.0007 CAIXA COMERCIAL
111.02 BANCO CONTA MOVIMENTO
111.02.0001 BANCO BRADESCO SA
111.02.0002 CEF RIO CLARO
111.02.0007 CAIXA ECONOMICA FEDERAL
111.02.0008 BANCO BANESPA S/A
111.02.0009 BANCO SUDAMERIS/AMER.SUL
111.02.0010 BANCO ITAU S/A
111.02.0011 BANCO ITAU PAULISTA
111.02.0012 BANCO DO BRASIL
111.02.0018 NOSSA CAIXA / NOSSO BANCO
111.02.0019 BANCO CRUZEIRO DO SUL
111.03 APLIC.FINANC.RENDA FIXA
public void leituraCTB(String arquivo) throws BiffException, IOException, SQLException{
Workbook workbook = Workbook.getWorkbook(new File(arquivo));
Sheet sheet = workbook.getSheet(0);
PreparedStatement stmt = null;
try {
String sql = "insert into ectbConta (cdEmpresa, cdConta, cdNivelPlano, cdGrupoConta, cdReduzido, cdContaContabil, nmConta, flContaAtiva, flBalanco, flRateio, flRedutora) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
stmt = DataSource.getConexao().prepareStatement(sql);
int linhas = sheet.getRows();
System.out.println("Iniciando a leitura da planilha XLS:");
ContaDB contaDB = new ContaDB();
NivelPlanoDB nivelPlanoDB = new NivelPlanoDB();
//
String[] np = "111.01.0006".split("\.");
for (int i = 0; i < np.length; i++) {
NivelPlano nivelPlano = new NivelPlano();
nivelPlano.setCdEmpresa(1);
nivelPlano.setCdNivelPlano(i+1);
nivelPlano.setDeNivelPlano("Nível "+(i+1));
nivelPlano.setNuDigitos(new Long(np[i].length()));
nivelPlano.setTpAnaliSinte( i+1 != np.length ? "S" : "A");
nivelPlano.setDeMascara("111.01.0006");
nivelPlanoDB.insert(nivelPlano);
}
for(int i = 0; i < linhas; i++){
System.out.println("Inserindo linha "+(i+1));
Cell cell1 = sheet.getCell(0, i);
Cell cell2 = sheet.getCell(1, i);
// Cell cell3 = sheet.getCell(2, i);
String as1 = cell1.getContents();
String as2 = cell2.getContents();
// String as3 = cell3.getContents();
int cdGrupoConta = Integer.parseInt(TextUtils.characterToString(as1.charAt(0)));
Conta conta = new Conta();
conta.setCdEmpresa(1);
conta.setCdConta(i+1);
conta.setCdNivelPlano(TextUtils.count(as1));
conta.setCdGrupoConta(cdGrupoConta);
conta.setCdReduzido(i+1);
conta.setCdContaContabil(as1.trim());
conta.setNmConta(as2.trim());
conta.setFlContaAtiva("S");
conta.setFlBalanco("N");
conta.setFlRateio("N");
conta.setFlRedutora('N');
// conta.setCdContaPai(1);
contaDB.insert(conta, stmt);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("Importação concluida");
workbook.close();
}
}
public void insert(Conta conta, PreparedStatement stmt) throws SQLException {
try {
stmt.setInt(1, conta.getCdEmpresa());
stmt.setInt(2, conta.getCdConta());
stmt.setInt(3, conta.getCdNivelPlano());
stmt.setInt(4, conta.getCdGrupoConta());
stmt.setInt(5, conta.getCdReduzido());
stmt.setString(6, conta.getCdContaContabil());
stmt.setString(7, conta.getNmConta());
stmt.setString(8, conta.getFlContaAtiva());
stmt.setString(9, conta.getFlBalanco());
stmt.setString(10, conta.getFlRateio());
stmt.setString(11, conta.getFlRedutora().toString());
// stmt.setInt(12, conta.getCdContaPai());
stmt.executeUpdate();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
Até aqui tudo funcionando perfeitamente.
um problema que não estou tendo ideia de como resolver é que, conforme o nivel vai aumentando, tenho que ir colocando no campo CdContaPai o codigo da conta com nivel inferior.
ex.
1 é a conta de mais alto nivel, não tem pai
11 conta fila a 1
111 conta filha da 11
111.01 conta filha da 111
111.01.0001 conta filha da 111.01
...
111.02 conta filha da 11
111.02.0001 conta filha da 111.02
e assim por diante.
Espero ter sido claro