Relizar Conexão Java com Sql Server 2008 – JDBC

Depois de apanhar por 3 dias de varios computadores que não queriam conectar no banco de MODO algum, finalmente descobri o problema. Agora vamos a um tutorial pra deixar bem claro de como fazer isso.

INSTALANDO O SQL SERVER 2008

Resolvi começar dessa parte por um motivo bem simples,a primeira vez que eu tive problemas com o Sql Server 2008 foi por que durante a instalação fizeram besteira. Logo, vamos de cara prevenir que isso aconteça. A Instalação foi feita com base no SQL SERVER 2008 R2 estou falando do express aqui, mas não tem muita diferença, caso haja alguma coisa que você não entendeu pode mandar o comentário que eu tento ajudar.

Nova Instalação
Nova Instalação

Essa opção só aparece se você não tiver instalado o sql ainda.

Torça pra não dar erro
Aqui você torce pra não dar erro

Normalmente não ocorre erro algum aqui, MAS eu ja tive problemas com isso, a solução (no meu caso) foi simples, a linguagem do SO era diferente da que estava no pacote. Ou seja se você baixou o Sql em ING e tem SO em PT ele vai dar erro, e vice-versa. Bom em seguida temos o classico termos e tal, LEIA e aceite, enfim, vamos ao que normalmente costuma dar problema.

Autenticação SQL
AQUI É QUE SEMPRE COLOCAM ERRADO..

Muitos problemas se dão nessa etapa, grande parte das pessoas vai apertando avançar sem nem mesmo ler nada. Depois eles tem um baita problema para resolver e não sabem nem porque. COLOQUE NO MODO MISTO! “Porque Angeliski? Que diferença faz?” Assim, pra começo de conversa esse um banco que funciona como SERVIDOR não pode se autenticar só pelo windows né? O mais importante é que caso você use aplicações cliente/servidor, elas não vão logar no seu BD se não for atraves de um usuário (normalmente o SA). Caso você ja tenha instalado seu SQL Server e não tenha feito isso, manda um comentário que eu coloco onde você tem de acertar.

Perfect!
Se você chegou aqui, comemore!

Ta instalado o negocio, agora vamos ao JAVA!

Conectando o Java ao SQL!

Finalmente chegamos onde queriamos. Primeiro o codigo:

import java.sql.*;

public class Main {
     public static void main(String[] args) {
    // string de conexão...usando Windows Authentication
       String connectionUrl = "jdbc: sqlserver: //localhost:1433;"
        + "databaseName=estudos;integratedSecurity=true;";
         try {
               Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
               Connection conn = DriverManager.getConnection(connectionUrl);
               System.out.println("Conexão obtida com sucesso.");
             } catch (SQLException ex) {
               System.out.println("SQLException: " + ex.getMessage());
               System.out.println("SQLState: " + ex.getSQLState());
               System.out.println("VendorError: " + ex.getErrorCode());
             } catch (Exception e) {
       System.out.println("Problemas ao tentar conectar com o banco de dados: "+ e);
              }
           }
}

 

(Pra quem quiser copiar o codigo indentado…) Uma coisa muito importante que não deve ser esquecida é  adicionar o driver ao projeto.( Se você não sabe como fazer isso no Eclipse…) O Link da microsoft você encontra aqui.Sim, ele funciona! Não adicione os dois, só o sqljdbc4, que da suporte. Agora é só executar e pronto!

Erro
TCP/IP? Não! Era pra funcionar!

“Angeliski, no seu pode até funcionado, mas aqui necas.” Eu sei, frustante. Mas vamos lá, você vai procurar no iniciar, na pasta do Sql uma ferramenta chamada “SQL Server Configuration Manager” .

SQL Manager
The Solution

Se você só tiver uma instancia instalada, vai aparecer como acima, rodando a instancia e o navegador. Caso tenha mais, priorize na qual você vai tentar se conectar. Entre em “Configuração de Rede do SQL Server” -> Protocolos para” o nome da instancia que você vai trabalhar. A tela abaixo vai aparecer.

SQL
“DESABILITADO? Não vai dar certo nunca!”

Como você deve ter reparado assim que abriu a tela, apenas “Memoria Compartilhada” esta habilitado. O mais importante, TCP/IP esta desabilitado. Entao nem preciso dizer que é para habilitar né? agora sim, tudo funcionando.

Erro Again
“Esse cara ta me zuando, continua o tal TCP/IP…”

Eu sei, foi nessa hora que o desespero começou, já que tava tudo certo. Eis que o Mestre me contou que existe um negocio chamado Portas Dinamicas. “What the fuck?” Tenso amigão, tenso. Vamos a Solução, volte lá onde você habilitou o TCP/IP, e selecione as Propriedades(do TCP/IP), vá até a aba Endereços IP e siga até o fim dela. Eis que aparece nossa inimiga. Em porta TCP coloque 1433. finito.

Dinamicas
“O Troço Chato..”

Eu concordo, chato mesmo. Você pode rodar se quiser, mas vou ser sincero: Vai dar erro.

Erro Final
“Isso não vai dar certo nunca…”

Calma, ultima etapa. Quando você usa autenticação integrada do Windows, o Windows precisa de uma dll para saber o que fazer. Então você tem de ir lá na pasta do driver que você baixou, tem uma pasta auth (adivinha porque?), entra na pasta que convem a sua arquitetura e copia a dll que está lá para o System32 do seu computador. FIM! Convem prestar atenção em uma coisa aqui, o databaseName tem de ser um banco valido no seu SQL Server, se não haverão outros erros. Alem disso, você pode (e deve) querer conectar o programa sem a autenticação do windows, nesse caso você deve fazer do seguinte modo: ir até a linha da “String connectionUrl”, no fim dela você retira a informação “integratedSecurity=true;”; Alem disso tem uma linha onde é chamado o metodo DriverManager.getConnection(connectionUrl), que passa só a url como parametro, nesse metodo você deve agora passar o usuario e a senha, ficando assim a mudança:  DriverManager.getConnection(connectionUrl,”USUARIO”,”SENHA”);(Se você quer saber do codigo..)

Duvidas? Gostou? Me acha um idiota? Comenta!

Angeliski

Anúncios

Trabalhando com Arrays – Parte 1

Uma estrutura que eu tenho visto dar trabalho para o pessoal são os Arrays, então resolvi escrever um pouco sobre eles, vamos antes fazer algumas considerações. Esses assuntos mais genéricos que podem ser aplicados em distintas linguagens vão ser escritos em C ANSI
“Mas Angeliski, você não falou que tava aprendendo Java? cade o Java man?”
Você empurra a carroça ou os bois que puxam? calma gafanhoto, o caminho do Cara Te (grana) é longo. Falando sério, o C ANSI é um padrão que deveria ser aprendido por todos, ele da base para muitas outras linguagens, desde o C++ até o Java, que tem sintaxe muito parecida, ele é simples de entender e pode facilmente transpor os conceitos para outra linguagem qualquer que você for implementar, então eu vou usar ele para passar códigos, lógico que se eu for falar de algo especifico do Java, não tem como colocar em C ANSI né?
E a Orientação a Objetos (que eu pretendo demorar um pouco para abordar..) provavelmente será abordada em Java, primeiro porque eu ainda não tive vivência valida com o C++, segundo que a gente da uma mudada né, a parte gráfica do Java é uma coisa que da uma motivada a mais em quem esta aprendendo. Esclarecido os Pingos do i vamos começar:

Array?Vetor? Que é tudo isso?

Em vários lugares você não vai encontrar o termo Array  e sim Vetor, isso se dá a uma “tradução” feita por alguém que só falava bobagem, eu aconselho você a chamar de Array.
“Certo, mas o que é esse Array?”

"Eu guardo roupas no vetor?"
“Quer dizer que o Array serve pra guardar roupas?”

Imagine que você tem um gaveteiro, e que cada gaveta dele tem um numero, se eu falo pra você: ‘Pega o item que esta na gaveta 2’, você vai lá na gaveta certa e me pega o item. Se você entendeu como esse gaveteiro funciona, só troque a palavra por Array.
“Quer dizer que o Array serve pra guardar roupas?”
( O.O )
Ok, vou explicar melhor. O Array funciona como um lugar para guardar coisas, ele tem um tamanho, assim como o gaveteiro, ele tem varias posições pra guardar as coisas, varias gavetas, e cada uma dessas posições tem um “endereço”, assim como o gaveteiro tem um numero para cada gaveta. Uma confusão muito comum é confundir o endereço da gaveta com o valor dela veja o exemplo:

Endereço 1 2 3 4 5 6
Valor 1 2 4 6 8 6

Se eu perguntar qual o valor do endereço 1? Resposta rápida:1

Mas e se eu perguntar qual o valor do endereço 4, a resposta é 4,3 ou 6? Vejamos:

Endereço 1 2 3 4 5 6
Valor 1 2 4 6 8 6

Agora ficou fácil, o endereço 4 tem o valor 6! Essa é uma confusão muito grande, endereço e valor são diferentes, o endereço 7 pode não conter valor algum, pode contar um valor qualquer, mesmo que ele seja diferente do valor 7, ele continua tendo endereço 7. Não se preocupe se deu uma enrolada, continue lendo que até o fim vai ficar claro.

Pra que afinal serve um Array?

Se imagine um programador recém contratado, pra você se acostumar com a rotina, seu chefe te passa um programa simples que  seu professor fazia na faculdade.
“É pra escola que abriu, você tem de pegar duas notas, P1 e P2, fazer a media e apresentar tudo, só isso cara.”
Você até da risada, já que você tinha feito isso no primeiro semestre. Moleza. 5 minutos depois, quando seu chefe olha o programa, ele questiona:” mas você só fez pra um aluno?”
Você usa todo o poder ninja para sair de enrascadas:
”Não, é que o Sr. não me disse quantos alunos queria, ai eu implementei só pra um inicialmente e vim perguntar.”
“Ah entendi, faz pra uns 10”.
Você corre la e cria todas as 30 variaveis.(10 de P1, 10 de P2 e 10 da media) e volta felizão.
“O pessoal da escola ligou, eles precisam para 100 alunos em vez de 10”
De volta a mesa, copia, cola, muda aqui, muda ali, meche aqui.300 Variaveis depois.
“Ficou legal, mas faz assim, como a escola é nova coloca para 1000 alunos que eles não vão ter problema de crescimento até o ano que vem pelo menos.”
A lágrima brota no olho, 3000 Variaveis!
Como eu faria?

float  P1[1000],P2[1000],MED[1000];

(O.o)
“Que diabos isso quer dizer?”
Bom, primeiro você tem de entender uma coisa sobre o Array, ele é uma estrutura de dados que armazena uma sequência de objetos, todos do mesmo tipo, em posições consecutivas da memória. Não ajudo? O Array é uma lista de variáveis, em vez de você colocar P1_1,P1_2…P1_N, você cria uma estrutura que faz isso:

P1[N]

onde:
P1: é o nome da variável, você pode chamar do que quiser, desde que atenda as regras para criação de nome de variáveis.
[ ]: isso identifica essa variável como uma estrutura sequencial, você afirma para o compilador que aquilo é um Array.
N: é um valor qualquer que identifica o TAMANHO do Array,numa primeira declaração, em demais casos se refere ao índice que você quer acessar( anteriormente citado como endereço).
Ou seja, quando algum problema tiver um numero grande de variáveis de mesmo tipo, você criar um Array que armazena esses valores, ao invés de ficar escrevendo uma a uma as variáveis.
“ E como eu guardo valores nessa sequência ai?”
Igualzinho a uma variável qualquer, mas com o detalhe do índice.
imagine que você tem a seguinte situação:

int X1,X2,X3;

int X[3];

o que podemos analisar dessa situação, temos 4 variaveis ai, X1,X2,X3 E X[ ]. Se eu pedir pra você colocar 10 em todos eles, como fazer?

X1=10;

X2=10;

X3=10;

X[ ] =10;

certo? Não. A ultima atribuição vai gerar um erro no seu compilador, se não acredita pode tentar. Porque? Se você tivesse feito X=10; daria erro também certo, afinal a variável com nome X não existe, X1 sim. O mesmo é valido para X [ ], ela é uma sequência, logo X[1] e valido, ao contrario de X[ ] que não aponta para lugar nenhum.Quando você cria uma variável com um Array, você define um tamanho para ela, dizendo que ela vai ter n lugares, o índice final dos Arrays sempre será dado por n-1.
“Cara, se você diz que o tamanho do Array é n, como ela vai ter uma posição a menos?”

Quantos números tem de 0 a 9?

Muita gente, MUITA MESMO responde 9, e se você respondeu saiba que esta errado.
“O cara nem sabe contar veio…nem vo continuar lendo…)
Contemos então:

0 – 1º

1 – 2º

2 – 3º

3 – 4º

4 – 5º

5 – 6º

6 – 7º

7 – 8º

8 – 9º

9 – 10º

\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/\o/
Exatamente, o 0 é um numero, ele é contado! Os Arrays também fazem isso, logo o primeiro numero do índice será sempre 0 ( POSIÇÃO INICIAL!) e termina em n-1 (POSIÇÃO FINAL!) já que a declaração de n não “considera o 0”, temos de considerar no tamanho dele.Entao nosso Array declarado como X[3] tem as posições X[0],X[1] e X[2], disponiveis para guarda um valor do tipo INT que é como ele foi declarado.
“Por que int?”
Leve em consideração uma variável primitiva qualquer(um otimo post se você nao sabe o que é variavel primitiva), se você declara ela como int, nao vai conseguir inserir valores do tipo float, o mesmo é valido para os Arrays, já que eles são apenas estruturas sequenciais do tipo que foi determinado.
Já teorizamos demais esse Array ai, que tal a gente por a mão na massa agora?

Inserindo os Valores no Negocio

Nada melhor que começarmos com o simples, colocar os valores no Array. Uma coisa que ninguém percebeu (acho…) até agora é que do jeito que foi explicado o Array ele continua sem utilidade, fora o fato que eu não preciso declarar 100 vezes ele no começo, mas se eu fosse fazer uma soma do X[3] como seria:

soma=X[0]+X[1]+X[3];

com X[3] (quando me referir a tamanho do Array, eles estão sublinhados para ficar mais fácil de distinguir, do contrario é POSIÇÃO) fica fácil de fazer isso, mas e X[100], X[1000]? A Vantagem do Array surge no índice, pois ele pode ser uma variável, veja um exemplo de soma com Array:


     for(int i=0;i<100;i++)
     soma=X[i]+soma;

nesse caso, o for vai rodar de 0 a 100, percorrendo todas as posições do Array. Fácil, simples e pratico.
Quem sabe o que esta errado na frase acima?
O For não percorre o Array de 0 a 100, percorre ele de 0 a 99 (i<100 e não i<=100), o que é uma diferença importante, pois se ele tentasse acessar a posição 100 poderia haver algum erro grave, já que essa posição não foi reservada pelo nosso programa, então muito cuidado na hora de criar suas condições para laço, seja for, while, if ou qualquer outro.
“Você falou, falou e continuo sem saber como inserir valores no Array…”
Vamos pensar um segundo. Se você sabe que o índice pode ser uma variável, fica fácil trabalhar com esse Array, para inserir o valor em todas as posições, você vai ter de percorrer todos as posições dele (se for necessário lógico, mas por hora vamos pensar que é!), e em cada posição receber o valor:

for(int i=0;i<100;i++){
			printf(“Digite o valor que vai na posição %i”,i);
			scanf(“%f”,&X[ i ]);// supondo que o Array seja de Float
		}

Pronto! O for vai de 0 a __(qual o valor?) e cada posição ele vai esperar você inserir o valor, antes de ir para a próxima posição pegar o próximo valor.

Se você entendeu como inserir valor
então sabe como imprimir os valores.
Senão
Volte la pra cima e leia de novo

mande um comentario.

Fim do programa

Angeliski

“… there is a huge difference between programs that merely work
and programs that are well-engineered,just as there is a huge difference
between a log thrown over a river and a well-engineered bridge.”
[P. A. Darnell, Ph. E. Margolis, Software Engineering in C]

Referencias Usadas:
IME
Fabio Rubim

Matematica e Programação

Matematica e programação tem sim a ver, mesmo que não seja de um modo direto.

Atualmente eu me encontro no 4º semestre do curso de ciência da computação, admito que realmente não tenho experiencia em industria (os Links que eu recomendo tem profissionais que tem isso), mas o meu objetivo nesse site não é ajudar você a entrar no mercado e se consagrar profissional, eu quero ajudar você a construir sua formação academica de modo a ter uma base forte para se tornar um bom profissional. Encheção a parte, vamos ao assunto. Eu percebi que muita gente que entra no curso de ciências da computação (não sei dizer se o mesmo ocorre em todos os curso de tecnologia) tem a decepção com a matematica. “Isso aqui parece curso de matematica veio, cade a computação? Eu nem vou usar derivada quando sair daqui…” Essa entre outras frases desdenhando a matematica. Bom, não trabalho em empresas, mas vou ser franco com o que eu imagino e suponho (fiquem livres para discordar), você realmente NÃO VAI USAR OS MILHÕES de calculos matematicos que te ensinaram. Então pra que isso? Simples, a matematica, fisica, filosofia e algumas outras materias que você considera sem importancia ( se você acha Algebra Linear sem importancia amigo, vai ter serios problemas em multiplicar matrizes…XD), geram na sua mente uma capacidade muito grande de abstrair informações. ”What? Olha lá o cara me tirando de bobo veio…”
To falando serio rapa! Um exemplo bem simples, meu atual professor de Estrutura de dados II não tem uma graduação tecnologica, ele é formado em fisica.
“Você é formado em fisica professor? Mas como você trabalha com software?”
“Cara, quem fez curso de fisica, sai pronto pra resolver qualquer problema.”
Fato, é o melhor professor de “programação” que  temos, ensina bem e da os exemplos mais legais. Agora porque isso? Essas materias que você ( e eu) acha idiota, são responsaveis por aumentar seu nivel de abstração do mundo, afinal para resolver problemas matematicos você tem de retirar dados do problema, de modo a equacionar uma formula, um sistema e outras relações que vão te dar a capacidade de matematicamente chegar em uma solução para aquele problema pontual.
“ Po Angeliski, você falou que o negocio aqui era descomplicar, cade isso?”
Ta vamos resumir o texto de modo que você possa se lembrar sempre:
“ As Materias que você detesta ou/e acha inuteis no seu curso, são as que vão realmente fazer diferença entre você ser O Cara na sua area, ou ser mais um.”
Não precisa gostar delas, mas se você quer ser um Alguêm, melhor aprender elas.

Angeliski

Hello world!

post de inauguração do meu blog

O clássico da Programação da inicio ao nosso site. Bem vindos a quem chegou, vamos ver se serve de alguma coisa essa vinda até aqui. Por hora vamos falar do proposito desse blog. Como um estudante de Ciência da Computação, eu vejo e sinto diversas dificuldades, sobre os mais variados assuntos, desde uma logica de programação, paradigmas, até a nossa querida Arquitetura e Organização de computadores, por isso resolvi criar esse blog de modo a reunir diversas duvidas, que me surgiram ou que já me foram perguntadas.

Inicialmente, por questões de tempo e de habito, vou postar alguns links Interessantes, para que eu possa me acostumar com essa coisa de postagens, ter tempo de criar um conteúdo legal pra disponibilizar e não ficar colocando um monte de porcaria aqui.Nessa primeira postagem fica a indicação desse link, para Java (atualmente a linguagem na qual estou aprendendo…)

Java Sem Café

 

 

Angeliski