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