quarta-feira, 10 de novembro de 2010

Ler um arquivo de texto para criar um banco de dados:

Estou utilizando o Postgresql, novamente.

Segue o caso de uso:
------------------------------------------------------------
Objetivo do Trabalho:

Ler um arquivo texto com a descrição de um banco de dados e criar o
banco de dados e as tabelas correspondentes.

O formato do arquivo de entrada é definido da seguinte forma

TABELA <nome da tabela>
CAMPO <nome do campo> <tipo de dado> <tamanho do campo>
INDICE <nome do campo> <nome do campo> <nome do campo> ...

O arquivo pode conter várias tabelas, cada tabela pode conter vários
campos e vários índices. O "tamanho do campo" é opcional. O índice
pode conter vários nomes de campos.
------------------------------------------------------------
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;


public class banco {

    public static void main(String args[]){
        banco BC = new banco();
        BC.leArquivo();
     
    }
 
    public void leArquivo(){
    
        String caminhonome=""; // serve para pegar o 'caminhonome' do arquivo
        String query = "";
        String aux = "";
        String nome[] = new String[100];
        String tipo[] = new String[1000];
        String tamanho[] = new String[1000];
        String separa[] = new String[1000];
        int i=0;
      
        //banco BC = new banco();
     
        Scanner entra = new Scanner(System.in);
        while(caminhonome.equals("")){
            System.out.println("Digite o caminho, nome e extensao do arquivo do Banco:");

            caminhonome = entra.next();         
        }
        try {
            FileInputStream fis = new FileInputStream(caminhonome);
            Scanner     scanner = new Scanner(fis);
          
            while (scanner.hasNext("TABELA")) {
                // pula a palavra "TABELA"
                scanner.next();
                // guarda o nome da tabela
                query += "CREATE TABLE "+scanner.next()+"(";
              
                while (scanner.hasNext("CAMPO")){
                   
                    // pula a palavra "CAMPO"
                    scanner.next();
                   
                    // guarda o nome do campo
                    nome[i] = scanner.next();                 
                   
                    // guarda o tipo da variável
                    tipo[i] = scanner.next();                 
                  
                    // guarda o tamanho da variável
                    tamanho[i] = "("+scanner.next()+")";                 
                  
                    if(scanner.hasNext("INDICE")){
                        scanner.next(); // pula a palavra INDICE
                        aux = scanner.next();
                        for(int j=0; j<i; j++){
                            if(nome[j].equals(aux)){
                                tamanho[j] += " PRIMARY KEY";
                            }
                        }
                    }
                    if(scanner.hasNext("CAMPO")){
                        separa[i] = ", ";
                        i++;
                    }                   
                }
                for(int y=0;y<i; y++){
                    if(y!=0){
                        query += separa[y];
                    }
                    query += nome[y];
                    query += " "+tipo[y];
                    query += " "+tamanho[y];
                }
                query += ");";

                // aqui será chamado o método para criar o banco.
                BC.criaBanco(query);
              
                query += "\n";
                System.out.println(query);
                query="";
               
                i=0;
            }
        }
        catch (Exception e) {
            System.out.println("Não foi possível ler o arquivo, erro de IO");
            System.exit(0);
        }
        System.out.println(query);
        System.exit(0);
    }
  
    public void criaBanco(String sql){
      
        // Cria a conexão com o banco de dados. Importante a IDE já estar setada para usar o banco
        try{
            Class.forName("org.postgresql.Driver");
        }catch(ClassNotFoundException e){
            System.out.println("Sem Driver");
            System.exit(1);
        }

        // cria a conexão
        Connection c = null;
        try {
            c = DriverManager.getConnection("jdbc:postgresql://localhost/postgres", "postgres", "senacrs");
        } catch (SQLException ex) {
            Logger.getLogger(banco.class.getName()).log(Level.SEVERE, null, ex);
        }
      
        // cria o statement
        Statement s = null;
        try {
            s = c.createStatement();
        } catch (SQLException ex) {
            Logger.getLogger(banco.class.getName()).log(Level.SEVERE, null, ex);
        }
             
        // faz a criação das tabelas a partir do comando lido anteriormente.
        try{
            s.executeUpdate(sql);
        }catch(SQLException ex){
            Logger.getLogger(banco.class.getName()).log(Level.SEVERE, null, ex);
        }
        System.out.println("Tabela Criada com Sucesso!");
    }
}

Nenhum comentário:

Postar um comentário