[Resolvido] Dúvida salvando ArrayList no BD

Ola galera,

Como faço pra salvar essa arraylist no banco de dados?

eu estava pensando em criar 5 if’s para cada coluna e um indicador de indici,
quando ele passase por todas as colunas da linha o valor voltava a ser 0.

exemplo:
coluna1 = 0
coluna2 = 1
coluna3 = 2
coluna5 = 3
coluna5 = 4

essa lista vai conter os seguintes dados:

00001 10:55:58 17/09/2010 0,0 0 00002 10:56:01 17/09/2010 0,0 0 00003 10:56:04 17/09/2010 0,0 0 00004 10:56:07 17/09/2010 0,0 0 00005 10:56:10 17/09/2010 0,0 0 00006 10:56:13 17/09/2010 0,0 0
veja o codigo completo:

[code]
public class Principal {

/**

  • @param args
  • @throws IOException
  • @throws SQLException
  • @throws ClassNotFoundException
    */
    public static void main(String[] args) throws IOException, SQLException, ClassNotFoundException {
    // TODO Auto-generated method stub
// teste para leitura do arquivo txt
// gerado pelo aplicativo do macromedidor

InputStream is = new FileInputStream("dados2.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
ArrayList<String> dados = new ArrayList<String>();

String linha = br.readLine(); // primeira linha
// String cabecalho1 = "Nº Aquisição   Horário     Data        Pressão [mca]";
String cabecalho2 = "Num. Registro         Horário           Data           Canal 1                Canal 2";

while (linha != null) { // inicia laço
  if (linha.equalsIgnoreCase(cabecalho2)) { // quando encontra a linha do cabeçalho ele para
    break;
  }
  linha = br.readLine();
}

linha = br.readLine(); // pega a proxima linha
while (linha != null) { 
  dados.add(linha); // armazena as linhas em uma lista
  linha = br.readLine();
}

br.close();
for (int i = 0; i < dados.size(); i++) {

  String[] separados = dados.get(i).split("\\s+"); // retira os espaços entre os dados deixando apenas um.

  for (String separado : separados) {

    System.out.print(separado + " "); // teste para ver se os dados esta passando
  }

  System.out.println();
}

}
}[/code]

OBS.: esse codigo é um teste, quando estiver pronto vou organiza-lo e separar os metodos :smiley:

Aconselho estudar um pouco mais de banco de dados…
entender como funciona, a estrutura dele e tals…

pelo que entendi,
vc soh tem que criar uma tabela “cabecalho2” e criar os atributos Num. Registro ,Horário, Data, Canal 1, Canal 2 pra ele

eu sei como funciona o banco de dados, só que eu nunca salvei dados aparti de uma ArrayList.

só quando eu recupero dados no banco que eu utilizo ArrayList para armazena.

quando eu salvei algo foi sempre referenciando o get :smiley:

Se entendi você lê em um arquivo Armazena no ArrayList é persiste o ArrayList.
Para salvar este Objeto use o get(int index) é salve no banco.

Antes do “FOR” da linha 38 vc deve abrir a transação com o banco de dados
Linha a linha vc deve fazer o insert, pode ser na linha 46
Depois da linha 48 (depois do FOR), deve fazer o commit da transação.

quero salvar os dados que contem na array e nao ela.

a array tem esses dados:

00001 10:55:58 17/09/2010 0,0 0 00002 10:56:01 17/09/2010 0,0 0 00003 10:56:04 17/09/2010 0,0 0 00004 10:56:07 17/09/2010 0,0 0 00005 10:56:10 17/09/2010 0,0 0 00006 10:56:13 17/09/2010 0,0 0
desse jeito com estes espaços, ate criei uma split pra quebrar esses espaços

quero que no banco fique assim:

col1 col2 col3 col4 col5 00001 10:55:58 17/09/2010 0,0 0 00002 10:56:01 17/09/2010 0,0 0 00003 10:56:04 17/09/2010 0,0 0 00004 10:56:07 17/09/2010 0,0 0 00005 10:56:10 17/09/2010 0,0 0 00006 10:56:13 17/09/2010 0,0 0

Provável que tenha transformar o “array” para “Byte array” e jogar ele para um campo BLOB do banco de dados.
Que pode também é transformar o arquivo direto para “Byte array”. org.apache.commons.io.IOUtils.toByteArray()

mudei um pouco seu código da uma olhada:

[code]public Class Registro{

//consertar os tipos

string Numero;
string Horario;
string Data;
string canal_1;
string canal_2;

gets…sets…

}

/* linha = br.readLine(); */

//transforma os dados em um objeto e grava no banco

while (linha != null) {

  String[] Linha_Arquivo = linha.split("\\s+");
  
  Registro registro = new Registro();

  registro.SetNumero(Linha_Arquivo[0]);
  registro.SetHorario(Linha_Arquivo[1]);
  registro.SetData(Linha_Arquivo[2]);
  registro.Setcanal_1(Linha_Arquivo[3]);
  registro.Setcanal_2(Linha_Arquivo[4]);

  // SalvarRegistro(Registro registro);

  linha = br.readLine();  
}  [/code]

cria um outro método chamado:

SalvarRegistro(Registro registro){}

e ai crie o insert into…blabla…

1 - Crie uma entidade que represente as propriedades do que arquivo contem.
2 - Tokenize a linha é set Valores para cada atributo correspondente que você criou na entidade.
3 - Adicione a entidade ao ArrayList.

Siga este Tutorial ele irá Ajudar:
http://www.roseindia.net/jdbc/Jdbc-batch-insert.shtml

obrigado douglas.

fiz um pouco diferente, mas deu certo também.

[code]
Dados d = new Dados();
new Conexao().getConnection();
int x = 0;

for (int i = 0; i < dados.size(); i++) {

  String[] separados = dados.get(i).split("\\s+"); // retira os espaços entre os dados deixando apenas um.

  for (String separado : separados) {

    if (x == 0) {
      d.setNum(separado);
    }
    if (x == 1) {
      d.setHora(separado);
    }
    if (x == 2) {
      d.setData(separado);
    }
    if (x == 3) {
      d.setCanal1(separado);
    }
    if (x == 4) {
      d.setCanal2(separado);
    }

    x++;

  }
}[/code]

RESOLVIDO