Criar BD em tempo de execução! [ RESOLVIDO ]

6 respostas
L

Aí, galera…

Como eu faço para verificar se o banco de dados “X” existe?
E como eu faço para cria-lo automaticamente em tempo de execução, caso não exista :?:
Quais classes e métodos devo usar :?:
Por exemplo: Minha aplicação, escrita em Java, inicia e verifica que se existe o BD banco_exemplo e, caso não exista, a propria aplicação executa os comandos de criação do BD, tipo: “CREATE DATABASE banco_exemplo”, “USE DATABASE banco_exemplo”, “CREATE TABLE tabela_exemplo…”, e talz…
:lol:

Será possível que ninguém sabe isso?

Se vale informar, estou usando JDBC, com o driver Connector/J do MySQL…

Valeu!!!

6 Respostas

M

Leia essa página: http://dev.mysql.com/doc/refman/4.1/pt/extensions-to-ansi.html
[adendo]Veja como o MySQL define a sintaxe de criar tabelas: http://dev.mysql.com/doc/refman/4.1/pt/create-table.html[/adendo]

Em algum lugar, vai ter algo como “Crie a tabela se não existir”, então procure!

Até!

L

maquiavelbona:
Leia essa página: http://dev.mysql.com/doc/refman/4.1/pt/extensions-to-ansi.html
[adendo]Veja como o MySQL define a sintaxe de criar tabelas: http://dev.mysql.com/doc/refman/4.1/pt/create-table.html[/adendo]

Nada haver, brother!
Você não entendeu meu problema!

Quero criar o BD em tempo de execução da minha aplicação construida em Java…
Por exemplo: Quando o programa iniciar, uma classe.java verifica se existe o BD criado no host, e caso não exista, então a mesma classe, ou outra classe específica para isso, cria o BD, executando no MySQL aqueles comandinhos básicos na criação de um BD, como “CREATE DATABASE banco_exemplo”, “USE DATABASE banco_exemplo”…
Entendeu???

Agora, se puder me ajudar com esse problema ficarei imensamente grato.

Valeu!

M

Na verdade, eu entendi e você não se deu ao trabalho de testar realmente.
Quando você se conecta via JDBC, você precisa de um usuário capaz de criar DBs e NÃO ( eu disse NÃO ) precisa conectar a um banco de dados específico. Então na sua URL de conexão não precisa especificar o DB que estás conectando e passar o parâmetro “;create=true” na url faz muito bem.
Agora, entre você olhar o que eu te passei e mudar CREATE TABLE IF NOT EXISTS por CREATE DATABASE IF NOT EXISTS, nada disso não exige algo de você. O resto, são os comandos padrões que você executaria em linha de comando.

Até!

L

maquiavelbona:
Na verdade, eu entendi e você não se deu ao trabalho de testar realmente.
Quando você se conecta via JDBC, você precisa de um usuário capaz de criar DBs e NÃO ( eu disse NÃO ) precisa conectar a um banco de dados específico. Então na sua URL de conexão não precisa especificar o DB que estás conectando e passar o parâmetro “;create=true” na url faz muito bem.
Agora, entre você olhar o que eu te passei e mudar CREATE TABLE IF NOT EXISTS por CREATE DATABASE IF NOT EXISTS, nada disso não exige algo de você.

Hehehe…
Você continua não entendendo!
Vou ser mais claro então.
"Não estou discutindo comandos de criação de tabelas ou BD’s, mas simplesmente tentando achar um meio de fazer isso no código java da minha aplicação, entende? Por exempplo, para executar uma consulta eu defino o código: rs = stmt.executeQuery('Select * from tabela1') importando as bibliotecas java.sql.ResultSet e java.sql.Statement, instanciando as classes vindouras logo após a conexão com o BD… Então o meu problema é: Se não houver conexão com o BD quais classes e métodos me permitirão criá-lo executando os inerentes comandos SQL???
É só isso que eu preciso!
Conheço o bastante de MySQL para saber como criar um BD ou tabelas em um, mas não de java para permitir fazê-lo permeado ao meu código java.
Entendeu agora, amigo???

Se você puder me ajudar eu agradeço de verdade, se não, entenda que não preciso saber os comandos MySQL e sim os comandos java que me permitem manipular SQL de criação desde o BD…

Espero sua resposta e compreesão.

Valeu!

M
O que você quer é isso:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TesteCreateDatabase {

	/**
	 * @author Marcos Iriarte
	 * @param args
	 * @throws ClassNotFoundException 
	 * @throws SQLException 
	 */
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		//Carrega driver do MySQL
		Class.forName("com.mysql.jdbc.Driver");
		//Abre conexão com o banco, não estou conectando a nenhuma base em específico
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost?user=usuario&password=senha");
		//Crio um Statement
		Statement stmt = conn.createStatement();
		System.out.println("Começo");
		//Toda operação que não for consulta, use executeUpdate, só assim
		//você poderá alterar algo no banco de dados
		int i = stmt.executeUpdate("CREATE DATABASE IF NOT EXISTS TESTECREATE");
		System.out.println("Resultado: "+i);// Se criar uma nova base de dados, o retorno será 1
		System.out.println("Final");
	}
}
Odeio colocar código, mas é o jeito.

Até!

L
maquiavelbona:
O que você quer é isso:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TesteCreateDatabase {

	/**
	 * @author Marcos Iriarte
	 * @param args
	 * @throws ClassNotFoundException 
	 * @throws SQLException 
	 */
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		//Carrega driver do MySQL
		Class.forName("com.mysql.jdbc.Driver");
		//Abre conexão com o banco, não estou conectando a nenhuma base em específico
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost?user=usuario&password=senha");
		//Crio um Statement
		Statement stmt = conn.createStatement();
		System.out.println("Começo");
		//Toda operação que não for consulta, use executeUpdate, só assim
		//você poderá alterar algo no banco de dados
		int i = stmt.executeUpdate("CREATE DATABASE IF NOT EXISTS TESTECREATE");
		System.out.println("Resultado: "+i);// Se criar uma nova base de dados, o retorno será 1
		System.out.println("Final");
	}
}

Issooooooo!!!!!!!!!!!!!!
Era exatamente isso que eu estava precisando!
Sou iniciante e não sabia que poderia me conectar ao banco sem especificar uma base de dados, por isso não estava conseguindo criar uma, pois estava dentro de outra, e não imagina como fazer fora...
Valeu, e me desculpe por fazê-lo digitar o código, rsrsrs...
Te devo essa!

T+

Criado 24 de outubro de 2007
Ultima resposta 1 de nov. de 2007
Respostas 6
Participantes 2