Pular para o conteúdo principal

Postagens

SQL Server 2008

Este é só um teste de post, mas fica aqui o aviso: Instalei o SQL Server 2008 rc0 numa máquina virtual com Windows 2003 server e estou brincando um pouco, me parecendo bastante interessante. Na verdade no meu trabalho utilizo mesmo o SQL Server 2000, mas pode ser que migremos logo logo para o SQL Server 2005 (:-P) ou mesmo para Oracle... Um coisa que gostei muito no SQLServer 2008 é a opção de se fazer backups já compactados, de forma natural: setadas as configurações, é só colocar o comando de compresão que temos um arquivo super compactado perto do original. Para restaurar o backup é tudo de forma muito natural, nem precisa de se preocupar em descompactar o arquivo. Estou pesquisando uma forma de fazer isso atualmente, mas no SQL Server 2000. Tentei utilizar a xp_makecab, mas esta é inútil para manipulação de dados com tamanho superior a 2GB. Ainda não testei, mas vou tentar utilizar algum compactardor de terceiro, como o RAR.
2008-07-23: finalmente, o programa funciona! Nesta parte final o que fizemos foi criar o método geraStr(), que como o nome fala, vai gravar o arquivo STR. - primeiro instanciamos rafOut, rafOut = new RandomAccessFile(fileNamePath+".str", "rw");, que vai gerar um arquivo ao final chamado “nome.str.str”. - em rafOut.writeShort(Short.reverseBytes(totalPonteiros)); estamos escrevendo em primeiro lugar o ponteiro de ponteiros, hehe, que é um short com a quantidade de ponteiros que existe no arquivo. Detalhe, que para colocar de volta no arquivo, temos que inverter os bytes para a forma original. - depois temos um laço que percorrerá o array de RegistraPonteiro, lista[], pegando as informações, short ponteiro e byte[] conteúdo, gravando-as em sequencia no arquivo. Novamente, temos que inverter o short ponteiro para gravar de forma correta: for ( i = 0; i rafOut.writeShort(Short.reverseBytes(lista[i].getPonteiro())); rafOut.write(...
2008-07-23: resolve melhorar um pouquinho o StrEditor e criei este método, getInfo(), que retorna um array de inteiros com várias informações a respeito dos ponteiros, offsets e tamanhos. No início temos o inteiro array que receberá as informações calculadas; declarei também várias variáveis que as descrevem cada índice do array. No fim retornamos o array int para ser utilizado com outros métodos. private int[] getInfo(){ int[] info = new int[6]; try { final int LINHA = 0; final int INICIOOFFSETLINHA = 1; final int FIMOFFSETLINHA = 2; final int OFFSETTEXTO = 3; final int TAMANHOTEXTO = 4; final int TAMANHOPONTEIRO = 5; info[LINHA] = getLine(); info[INICIOOFFSETLINHA] = txtMain.getLineStartOffset(info[LINHA]); info[FIMOFFSETLINHA] = txtMain.getLineEndOffset(info[LINHA]); info[OFFSETTEXTO] = info[INICIOOFFSETLINHA]; info[TAMANHOTEXTO] = (info[FIMOFFSETLINHA]-1) - info[OFFSETTEXTO]; ...
2008-07-22: Ontem conseguimos fazer coisas importantes, como ler a linha de texto e calcular o tamanho do ponteiro. Hoje, continuando, vamos pegar estas informações e devolver ao array de RegistraPonteiro, que possui como atributos, short ponteiro, byte[] conteúdo. Criamos um método chamado writeChanges() que recebe os parâmetros int linha, short ponteiro e String texto. Como cada ponteiro está em uma linha, o parâmetro linha serve como índex do array RegistraPonteiro lista[]. Os outros parâmetros serão os novos valores do ponteiro e seu conteúdo, definidos através dos métodos setPonteiro(short ponteiro) e setConteudo(byte[] conteudo) da Classe RegistraPonteiro. Para um teste simples, é só retirar o “//DEBUG” e olhar na saída de console o resultado. Desta vez, depois de muito procurar, consegui converter String para bytes de uma forma fácil, através de String.getBytes(). Comentando os teste debugs: - em Integer.toHexString((int) teste.getPonteiro()));, recebemos o valor short com o mét...
StrEditor: hoje fiquei quebrando a cabeça. Depois de abrir o arquivo str, preciso modificar a linha de texto e pegar somente o que me interessa, calculando o tamanho. Daí posso calcular o tamanho do ponteiro deste bloco modificado de texto. Bom, aproveitando o método que criamos anteriormente, getLine(), precisamos saber o início da linha, em offset: public int JTextArea.getLineStartOffset(int line). Com o método public int JTextArea.getLineEndOffset(int line) conseguimos saber o ultimo offset da linha em questão. Agora fica fácil, é só utilizar o método public String JTextArea.getText(int offs, int len), passando o offset e o tamanho a ser lido. O código abaixo exemplifica o que fiz para conseguir isso: private void txtMainMouseClicked(java.awt.event.MouseEvent evt) { try { int linha = getLine();//guarda a linha int inicioOffsetLinha = txtMain.getLineStartOffset(getLine());//offset inicio linha ...
2008-07-18: Hoje estava eu brincando com o SQLServer 2008 rc0 e lendo blogs sobre o assunto. Aprendi sobre o plano de execução que o SQLServer cria para agilizar uma busca. Interessante mesmo foi que consegui criar um Job para fazer backup dos bancos, mas não apenas isso, primeiro seleciono um banco, seleciono suas tabelas, ajusto os indexes e recompilo um novo plano de execução. Daí é só backapear. Depois ia testar uma funcionalidade nova, que é a COMPRESSION, mas ainda não testei. Depois que eu der um jeito de instalar o SQLServer 2008 aqui posso explicar as coisas com mais calma e clareza. Preciso preparar meu trabalho interdisciplinar. Estava esses tempos atrás fazendo uns teste sobre mapas e parece que vou seguir essa linha. Achei show de bola. Tem um amigo no trabalho que é desenvolvedor web e tem um sistema feito em .net chamado GEO, que ele utiliza para criar geodados. Muito legal, por exemplo, temos a cidade de São Paulo e seus devidos bairros, etc., então é mostrado na tela, ...
2008-07-18: Nesta madrugada estou eu mexendo um pouquinho no strEditor. Desta vez o desafio foi criar um mecanismo que por onde eu percorra ou click na área de texto, seja exibido em que linha estou. Consegui resolver da seguinte maneira: - primeiro, pego a atual posição do cursor: JTextArea.getCaretPosition() retorna um int da posição de onde está o cursor. - depois, utilizando o método JTextArea. getLineOfOffset(int offset) teremos como resultado um int da linha que está o offset. Na prática, criamos um método getLine(): private int getLine(){ int posicao = txtMain.getCaretPosition();//guarda a posição do cursor int linha = 0;//inicializa com 0 try { //passamos como parâmetro a posição do cursor linha = txtMain.getLineOfOffset(posicao); } catch (BadLocationException ex) { // } return linha;//retorna a linha do cursor } Setando o label ficaria assim: jLabel1.setText("Linha: "+getLine()); Um probleminha que t...