Como trabalho da faculdade, tenho que desenvolver um mini sgbd.
As colunas das tabelas devem ser variáveis bem como o tamanho da mesma.
Isto não é muito difícil de fazer, meu problema é que tenho que passar como parâmetro da o tipo de dados que minha coluna vai armazenar, e isto não está funcionando adequadamente.
Estou utilizando como tipo genérico o Class, mas já tentei usar T, nos dois casos não fui muito longe.
[code]
public class Tabela {
private ArrayList<ArrayList><Class>> colunas;
private String[] nomeColunas;
private int i;
public Tabela(){
i = 0;
colunas = new ArrayList<ArrayList><Class>>();
nomeColunas = new String[5];
}
public void adicionaColuna(Class tipo, String nomeColuna){
ArrayList<Class> lista = new ArrayList<Class>();
colunas.add(lista);
nomeColunas[i] = nomeColuna;
i++;
}
public void adicionaDado(Class dado){
int j = 0;
colunas.get(j).add(dado);
System.out.println(colunas.get(j).get(j));
}
public ArrayList getColunas() {
return colunas;
}
public String[] getNomeColunas() {
return nomeColunas;
}
}[/code]
Esse aí é como está o código atualmente, não tem muita coisa, empaquei mesmo na hora de tipar o meu array
se alguém tiver uma idéia, um código pra dar uma olhada tudo é bem vindo.
package org.domain.teste.session;
import java.util.HashMap;
import java.util.Map;
public class Table {
private String name;
private Map<String, Object> columns;
public Table(String name) {
this.name = name;
columns = new HashMap<String, Object>();
}
public void addColumn(String name, Object type) {
if (name != null && type != null) {
if (!columns.containsKey(name)) {
columns.put(name, type);
System.out.println("Coluna " + name + " adicionada com sucesso!");
} else {
System.out.println("# Coluna não adicionada");
System.out.println("# Já existe uma coluna com o nome " + name);
}
}
}
public void removeColumn(String name) {
if (name != null) {
if (columns.containsKey(name)) {
columns.remove(name);
System.out.println("Coluna " + name + " removida com sucesso!");
} else {
System.out.println("# Coluna não removida");
System.out.println("# Não existe uma coluna com o nome " + name);
}
}
}
public void alterColumn(String name, Object type) {
if (name != null && type != null) {
if (columns.containsKey(name)) {
columns.put(name, type);
System.out.println("Coluna " + name + " alterada com sucesso!");
} else {
System.out.println("# Coluna não alterada");
System.out.println("# Não existe uma coluna com o nome " + name);
}
}
}
public Object getTypeColumn (String name) {
return columns.get(name);
}
public Map<String, Object> getColumns() {
return columns;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Tá pronto a parte superficial … e é uma idéia, pode não ser a melhor.
Qndo eu tiver mais tempo faço a parte dos dados, para q sejam tipados.
AUHUAuHAUHU … tá pronto!
Quem vê pensa q eu não trabalho…
Realmente tinha razão sobre o Object. Tinha q ser Class.
package org.domain.teste.session;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class Table {
private String name;
private Map<String, Class> columns;
private List<List<Object>> data;
public Table(String name) {
this.name = name;
columns = new LinkedHashMap<String, Class>();
setData(new ArrayList<List<Object>>());
}
public void addNewRow(Object... type) {
// Verifica se a quantidade de objetos passados é igual a quantidade de
// colunas
int count = 0;
for (Object o : type)
count++;
if (count != columns.size())
System.out.println("# Quantidade de objetos passados não confere com a quantidade de colunas da tabela");
// Verifica os tipos e adiciona os dados na lista
List<Object> row = new ArrayList<Object>();
List<Class> types = new ArrayList<Class>(columns.values());
int i = 0;
for (Object o : type) {
if (types.get(i).equals(o.getClass())) {
row.add(o);
i++;
} else {
row.clear();
System.out.println("# Registro não adicionado");
System.out.println("# " + o + " não é do tipo " + types.get(i).getClass());
break;
}
}
// Verifica se todos os dados foram adicionados
if (row.size() != count) {
System.out.println("# Ocorreu algum erro ao adicionar os dados :(");
}
// Por fim adiciona esta linha na tabela
data.add(row);
}
public void dataList() {
for (List<Object> row : data) {
String rowString = "[";
for (Object o : row) {
rowString += o + ",";
}
rowString += "]";
System.out.println(rowString);
}
}
public void addColumn(String name, Class clazz) {
if (name != null && clazz != null) {
if (!columns.containsKey(name)) {
columns.put(name, clazz);
System.out.println("Coluna " + name + " adicionada com sucesso!");
} else {
System.out.println("# Coluna não adicionada");
System.out.println("# Já existe uma coluna com o nome " + name);
}
}
}
public void removeColumn(String name) {
if (name != null) {
if (columns.containsKey(name)) {
columns.remove(name);
System.out.println("Coluna " + name + " removida com sucesso!");
} else {
System.out.println("# Coluna não removida");
System.out.println("# Não existe uma coluna com o nome " + name);
}
}
}
public void alterColumn(String name, Class clazz) {
if (name != null && clazz != null) {
if (columns.containsKey(name)) {
columns.put(name, clazz);
System.out.println("Coluna " + name + " alterada com sucesso!");
} else {
System.out.println("# Coluna não alterada");
System.out.println("# Não existe uma coluna com o nome " + name);
}
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Object getTypeColumn(String name) {
return columns.get(name);
}
public Map<String, Class> getColumns() {
return columns;
}
public void setData(List<List<Object>> data) {
this.data = data;
}
public List<List<Object>> getData() {
return data;
}
}
package org.domain.teste.session;
public class Teste {
public static void main(String[] args) {
// Nova tabela
Table table = new Table("cliente");
// Adicionar as colunas da tabela
table.addColumn("id", Integer.class);
table.addColumn("name", String.class);
table.addColumn("single", Boolean.class);
// Adicionar dados *
table.addNewRow(1, "Aluisio", true);
table.addNewRow(1, "Teste", false);
table.addNewRow(3, "Outro teste", false);
table.dataList();
}
}
Caramba muito bom…
cheguei em algo bem parecido…
agora estou mechendo com o remove…
que no meu caso tem que ser feito de forma arbitrária, acessando o arquivo…
mas to quase lá já…
quando estiver pronto eu posto o código aqui pra você dar uma olhada…
mas ficou fera esse que vc fez aí…
muito bom mesmo…