Eu queria uma coisa mais ou menos assim:
//class típo
public class Tipo implements Serializable
{
private char[] nomeTipo;
private char tamanho[];
//construtor utilizado para varchar
public Tipo(String nome, int tam)
{
this.nomeTipo = nome.toCharArray() ;
this.tamanho = new char[tam];
}
//metodos
}
//class registro
public class Registro implements Serializable
{
private char[] sNome;
private Tipo tipo;
private char[] sPrimaria;
private char[] sEstrangeira;
private String[] vetValor;
private static int iValor = 10; // maximo de valores suportados
private int numValor = 0; //numero de valores existentes
public Registro(String nomeReg,Tipo tipo,String chave)
{
this.sNome = nomeReg.toCharArray() ;
this.tipo = tipo;
this.vetValor = new String[iValor];
if(chave.equals(“primaria”))
this.sPrimaria = chave.toCharArray() ;
else if(chave.equals(“estrangeira”))
this.sEstrangeira = chave.toCharArray() ;
}
//metodos
}
//class bloco
public class Bloco implements Serializable
{
private Registro[] bloco;
private int qtdeRegistro;
private int numReg=0;
private int numBloco;
public Bloco(int tamBloco,int numBloco)
{
this.bloco = new Registro[tamBloco];
this.qtdeRegistro = tamBloco;
this.numBloco = numBloco;
}
//metodos
}
//METODP SIZEOF ACOXAMBRADO
public static int sizeof(Object o)
{
try
{
ByteArrayOutputStream ba = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(ba);
oos.writeObject(o);
return ba.toByteArray().length;
}
catch (IOException ex)
{
throw new RuntimeException(ex.toString());
}
}
PRECISARIA UMA COISA DESTE TIPO SO QUE FIZ ALGUNS TESTES MAIS NAO FUNCIAONA
public Bloco leBloco(Banco banco,int posicao) //throws FileNotFoundException
{
String sArqBanco = banco.getNomeArquivo();
Bloco bloco=null;
//int iLocalizacao=0;
//Vector vetIdent = banco.getVetIdentificador();
//IdentificaBloco idBloco = (IdentificaBloco)vetIdent.elementAt(posicao);
//int tamBloco = idBloco.getSizeOf();
if(posicao ==-1)
{
return null;
}
else
{
try
{
FileInputStream f = new FileInputStream(sArqBanco);
ObjectInputStream input = new ObjectInputStream( f );
for(int i=0;i < posicao;i++)
{
input.readObject();
//idBloco = (IdentificaBloco)vetIdent.elementAt(i);
//iLocalizacao = iLocalizacao + idBloco.getSizeOf();
}
bloco = (Bloco)input.readObject();
input.close();
return bloco;
/*
RandomAccessFile random = new RandomAccessFile(sArqBanco,“r”);
random.seek(iLocalizacao);
byte[] buf = new byte[tamBloco];
random.read(buf);
Object obj =(Object)buf; //DA PALA DE EXEC.
bloco = (Bloco)obj;
return bloco;
*/
}
catch(IOException e)
{
JOptionPane.showMessageDialog(null,"Problemas em desalocar blocos");
}
}
return bloco;
}
public void gravaBloco(Banco banco,int posicao,Bloco bloco) //throws FileNotFoundException
{
String sArqBanco = banco.getNomeArquivo();
int iLocalizacao=0;
Vector vetIdent = banco.getVetIdentificador();
IdentificaBloco idBloco = (IdentificaBloco)vetIdent.elementAt(posicao);
int tamBloco = idBloco.getSizeOf();
if(posicao ==-1)
{
JOptionPane.showMessageDialog(null,"ERRO: posicao -1");
}
else
{
try
{
RandomAccessFile random = new RandomAccessFile(sArqBanco,"w");
for(int i=0;i < posicao;i++)
{
idBloco = (IdentificaBloco)vetIdent.elementAt(i);
iLocalizacao = iLocalizacao + idBloco.getSizeOf();
}
random.seek(posicao);
FileOutputStream f = new FileOutputStream(random.getFilePointer());
ObjectOutputStream output = new ObjectOutputStream(f);
output.writeObject(Output);
output.close();
/*
RandomAccessFile random = new RandomAccessFile(sArqBanco,"w");
random.seek(iLocalizacao);
Object obj =(Object)bloco;
byte[] buf = (byte[])obj; //DA PALA DE EXEC.
random.write(buf);
JOptionPane.showMessageDialog(null,"bloco gravado teste");
*/
}
catch(IOException e)
{
JOptionPane.showMessageDialog(null,"ERRO:"+e.toString());
}
}
}
}
O objeto IdentificaBloco identifica onde o bloco de determinada tabela se encontra no disco.Possui tambem um campo tamanho = IdentificaBloco.sizeof()
Desculpe ai cara mas to precisando de ajuda nesta pala ai.Se mudar o esquema como vc me disse terei de fazer tudo de novo e nao tenho mais tempo.
Valeu
Carlos Martins