Problema apostila fj21 Caelum

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.

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?

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.

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

romarcio,

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

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.

Hum, ta ok.

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, "contato@caelum.com.br");
		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.

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

robertoMoraes
.
Muito obrigado.

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

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.

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?

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.

[quote=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?

[/quote]

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:

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)  );"  

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+.

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:

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?

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 +