Problema apostila fj21 Caelum

30 respostas
P

Pessoal, estou estudando pela apostila fj21 da Caelum. Estou estudando como o java, linguagem de programação orientada a objeto pode utilizar banco de dados relacional como o mysql. Essa “tradução” é feita pela API JDBC neh? Bom, estou fazendo um exercicio para praticar como abrir uma conexão com o banco de dados. Para abrir uma conexão com um banco temos que usar o driver dele neh, no meu caso o mysql conector para Java. Para saber qual banco vamos usar temos que usar essa string:

jdbc:mysql://ip/nome_do_banco

No exemplo da Caelum eles botam

Connection conexao = DriverManager.getConnection("jdbc:mysql://localhost/fj21");

O banco de dados que eles usaram foi o fj21 neh? Como devo criar esse banco? Tenho que criar pelo sql mesmo? Criando uma tabela normalmente? Ou crio fazendo em Java mesmo? Não sei, acho que isto era para esta mais explicado na apostila.

Até mais gente.

30 Respostas

P

Bom gente, entrei no mysql command client line e digitei os comandos para criar um database chamado “testejdbc”. Então fiz assim na String JDBC:

DriverManager.getConnection("jdbc:mysql://localhost/testejdbc", "root", "12345678");

12345678 é a senha do meu banco. Assim consegui criar a conexão com o banco.

Bom, mas teria alguma forma de criar esse database sem ser pelo prompt do mysql mesmo?

romarcio

Vc pode baixar o MySQL Administrator.

Da uma olhada aqui nesse tutorial: http://downloads.mysql.com/docs/administrator-pt.a4.pdf

Dai pode ser criado o banco e as tabelas por modo visual e não apenas por SQL.

P

Vou da uma olhadinha na apostila aew. qualquer duvida minha eu volto aqui.

Vou usar este topico como tira duvidas do meu estudo de java web pela apostila FJ21.

Muito obrigado

P

romarcio,

È mais comum usar o MySQL Administrator ou linha de comando? È melho usar o Administrator mesmo?

romarcio

Não sei te informar.

Mas o Admistrador te fornece mais praticidade para ambiente de desenvolvimento pelo menos.

Acho que isso fica por conta própria de cada um ou da empresa, não tem certo ou errado nesse caso.

P

Hum, ta ok.

P

Pessoal, quando eu executo essa classe para persistir no BD eu crio um contato na tabela com nome contatos, certo?

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Calendar;

import br.com.caelum.jdbc.ConnectionFactory;

public class JDBCInsere {

	public static void main(String[] args) throws SQLException {
		Connection con = new ConnectionFactory().getConnection();
		String sql = "insert into contatos (nome,email,endereco,dataNascimento) values (?,?,?,?)";
		PreparedStatement stmt = con.prepareStatement(sql);
		
		stmt.setString(1, "Caelum");
		stmt.setString(2, "[email removido]");
		stmt.setString(3, "R. Vergueiro 3185 cj57");
		stmt.setDate(4, new java.sql.Date(Calendar.getInstance().getTimeInMillis()));
		
		stmt.execute();
		stmt.close();
		
		System.out.println("Gravado");
		
		con.close();
	}
}

Dei nome, e-mail, endereço e data da criação do contato.
Como faço para ver o contato que eu acabei de criar? Procurei no MySQL Administrator mas não achei.

robertoMoraes

sua pergunta e respondida algumas paginas a frente na apostila com um metodo para exibir os cadastros do seu banco na tela

P

robertoMoraes
.
Muito obrigado.

robertoMoraes

nada li essa apostila a pouco tempo e por sinal e muito boa da pra ter varias ideias para projetos web

P

Pessoal, como vocês podem ver pela print acima a tabela que criei tem ids crescentes, o problema é que se eu apago um registro os ids não diminuem, ele continuam crescendo. Tipo, Tenho só dois registros, mas os ids deles são 7 e 9 e não 1 e 2 como eu queria, como faço isso? Isso é para ser feito na criação da tabela? Para criação da tabela eu fiz:

create table contatos(
       id BEGINT NOT NULL AUTO_INCREMENT,
       nome VARCHAR(255),
       email VARCHAR(255),
       ...
       primary key (id)
);

Oque posso mudar para o id ficar do jeito que relatei acima? Valeu gente.

robertoMoraes

mas por que voce quer mudar os ids?

qnd voce cria uma Primary key (no seu caso o id) ela serve para o banco c axar nos registros

por issu ela e marcada como auto-increment assim voce nunca tera 2 registros na tabela com o mesmo id (o que geraria uma caca tremenda)

o valor que o banco deu para a chave id nao vai lhe atrapalhar em nada.

ps: algum motivo para querer que os ids sejam 1 e 2?

P

Só mais uma coisinha, pela apostila aprendir a adicionar um registro, alterar um registro, deletar um registro, listar os registros, mas tudo isso numa tabela previamente criada. Para meu exercício eu criei uma tabela ou por linha de comando do MySQL ou mesmo pelo MySQL Administrator, oque eu queria saber, e que não tem na apostila, é se tem como criar uma tabela usando JDBC. Já que eu posso inserir, alterar e deletar, listar registros por que não criar uma tabela? Como faço? VLW gente.

P

robertoMoraes:
mas por que voce quer mudar os ids?

qnd voce cria uma Primary key (no seu caso o id) ela serve para o banco c axar nos registros

por issu ela e marcada como auto-increment assim voce nunca tera 2 registros na tabela com o mesmo id (o que geraria uma caca tremenda)

o valor que o banco deu para a chave id nao vai lhe atrapalhar em nada.

ps: algum motivo para querer que os ids sejam 1 e 2?

Não não, não existe nenhum motivo para mudar os ids não. Só achei que ficaria mais organizado pois tendo somente dois registros eu já saberia que um teria id 1 e outro 2. Mas vou deixar assim mesmo, melhor doque ter uma caca tremenda. :stuck_out_tongue:

robertoMoraes

poe o sql da sua tabela numa string e pronto.

String cria_tabela = "create table contatos(  "+
                              "id BEGINT NOT NULL AUTO_INCREMENT, "+ 
                              "nome VARCHAR(255), "+ 
                              "email VARCHAR(255), "+  
                              "primary key (id)"+  
                              ");";

ps: o mesmo poderia ser feito em 1 unica linha :

String cria_tabela = "create table contatos( id BEGINT NOT NULL AUTO_INCREMENT,  nome VARCHAR(255),  email VARCHAR(255),   primary key (id)  );"
P

Mas depois como faço para usar essa String para criar um novo database? Eu fiz assim mas da um erro:

package br.com.caelum.jdbc.teste;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import br.com.caelum.jdbc.ConnectionFactory;

public class TestaCriaTabela {


	public static void main(String[] args) throws SQLException {
		Connection connection = new ConnectionFactory().getConnection();
		String sql = "create table funcionarios(  "+  
		             "id BEGINT NOT NULL AUTO_INCREMENT, "+   
		             "nome VARCHAR(255), "+   
		             "usuario VARCHAR(255), "+
		             "senha VARCHAR(255), "+
		             "primary key (id)"+    
		             ");";  
		try{
			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.execute();
                        System.out.println("Tabela Criada");
			stmt.close();
		} catch (SQLException e){
			throw new RuntimeException(e);
		}

	}

}

Olha aqui como é a classe ConnectionFactory

package br.com.caelum.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionFactory{
	public Connection getConnection(){
	System.out.println("Conectando ao banco");
		try {
			return DriverManager.getConnection("jdbc:mysql://localhost/testejdbc", "root", "19021988");
		} catch(SQLException e){
			throw new RuntimeException(e);
		}
	}

}

Alguma coisa me diz que estou complicando d+.

P

Pronto, pronto. Deu certo, era só a sintax do SQL que tava errada mesmo, na verdade nem sintax era, era só que tinha trocado BIGINT por BEGINT. :smiley:

P

Pessoal, como faço para criar um db ao inves de tabela? Estou tendo dificuldades com isso porque quando crio um objeto da classe ConnectionFactory eu me conecto diretamente ao db testejdbc. Tem como criar uma classe para se conectar apenas ao mysql em se e não a um db específico?

robertoMoraes

acredito que tenha porem nunca tentei algo acima d criar tabelas

talvez se vc conectar no banco shema (axo que n é bem esse o nome n lembro) , voce possa criar dbs

ps: estude sobre permiçoes de usuarios do banco nao e uma boa ideia permitir q o usuario da sua aplicaçao que se conecta do banco

possa ficar criando e deletando tabelas , bancos se alguem tiver acesso a issu vc vai ter um problema daqueles …

tente criar um usuario q so possa executar as açoes q sua aplicaçao precisa nada +

P

Entendo, como é só uma prática vou ficar por aqui. :smiley: Bom, a apostila começa a falar sobre Jee propriamente dito a partir de agora. Vou continuar meu estudo. :smiley: Alguma coisa me diz que vou passar muitas vezes por aqui ainda. :stuck_out_tongue: Vlw mesmo cara.

P

Pessoal, estou empancado aqui. Não consigo achar um link para download do apache tomcat que seja .exe. Todos que tem no site são no máximo .zip. Se eu baixo o .zip ele não vem com o .exe aí eu teria que fazer uma pá de coisas certo? Alguém não teria o link do .exe? VLW gente.

romarcio

É só descompactar a pasta em algum diretório, tipo ‘C:\’ ou ‘C:\Arquivos de Programas’

Depois vc precisa setar as variaveis de ambiente.

CATALINA_HOME
C:\Arquivos de programas\Apache Software Foundation\Tomcat 6.0

PATH
CATALINA_HOME\bin;

O endereço do CATALINA_HOME deve ser identico ao local em que está a pasta do tomcar no seu pc, esse caminho que coloquei é um exemplo.

P

Valeu Romarcio. :smiley:

P

Setei CATALINA_HOME com o valor de D:\TomCat e CLASSPATH com o valor de D:\tomcat\common\lib\servlet-api.jar;

Quando tento executar o o apache fazendo:

D:\TomCat\bin>startup.bat

aparece uma mensagem: " Neither the Java_Home nor the JRE_HOME enviroment variable is defined at least one of these enviroment variable is needed to run this program"

Eu instalei o pack completo, JDK. Oque posso fazer agora?

P

Bom gente, oque eu fiz foi criar o JAVA_HOME e setar para a pasta JDK1.6.0. , agora quando vou executar o Tomcat da um erro assim:

INFO:  The APR based Apache Tomcar native library whixh allows optimal performance in production environments was not found on the java.library.path: D:\Arquivos de programas\Java\jdk1.6.0\bin;

E agora?

P

Ah gente, não to conseguindo instalar de jeito nenhuma, CARAMBA, to chateado já oh. Eu consegui o .exe que eu estava atrás, mesmo com ele ta dando erro aqui. Tirei uma print para ficar melhor, olhem aqui:

P

Ah, fala serio gente, consegui. Sabem oque era? O meu anti virus Kaspersky bloqueando a porta(ele também é firewall). È barra viu. Vlw gente.

P

Pessoal, estou com duas dúvidas aqui.

1)Como eu falei mais acima o meu antivirus (Kaspersky internet Security) ta botando boneco com o Apache tomcat, só consigo startar o servidor se o kaspersky estiver desabilitado. Alguém tem alguma dica para eu liberar o tomcat no kaspersky?

2)Eu criei um projeto chamado primeiroprojeto, o problema é que quando tento acessar ele pelo browser não da certo, da um erro 404 e “description The requested resource (/primeiroprojeto/) is not available”.

Eu fui e criei um arquivo chamado Index.html, esse arquivo só contem umas besteirinhas em html mesmo, quando faço:

http://localhost:8080/primeiroprojeto/Index.html

ele abre normalmente. Oque pode esta dando errado para não abrir a URL principal d projeto?

P

Pessoal, estou estudando a part de Servlets, o exercício que estou fazendo é para cadastrar um usuario no banco de dados. Como vou mecher com o banco eu preciso importar as classes do projeto JDBC que fiz no capitulo 1. Como faço para improtar o projeto? Preciso importar o projeto todo? Se for para importar só algumas classes eu importo .java ou .class? E nesse caso, eu vou ter que criar os pacotes de onde elas vieram e colocar no meu oprojeto atual? Pergunto isso por que quando importo as classes dicam sem pacote, aí não sei se eu coloco dentro da pasta src do meu projeto e crio os respectivos pacotes novamentes. Olhem aqui od dois projetos e as classes que importei de jdbc para jf21-agenda:

Tenho que criar os pacotes no fj21-agenda e colocar as classes tais como o do jdbc ?

P

Pessoal, Alguém pode me passar um exercicio para eu poder usar hibernate? Pode ser para usar Java SE mesmo, ou se quiserem Java EE mesmo. Ajuda aqui gente. Agora preciso de prática, prática prática.

Criado 20 de agosto de 2010
Ultima resposta 9 de out. de 2010
Respostas 30
Participantes 3