Criando banco de dados pelo java

Prezados,

estou precisando criar um sistema que tenha suporte a criação de banco de dados via java. Gostaria de saber se a classe jdbc preve esta necessidade, e caso afirmativo qual seria a sintaxe que deveria utilizar. Caso negativo, existiria alguma outra forma de realizar esta criação de banco de dados através do java?

Tenho a impressão de que não é possivel, já que quando vamos utilizar jdbc para manipular algo no banco, precisamos nos conectar ha algum banco primeiro, certo? Então se ele não foi criado ainda não da pra conectar

Não sei se foi meio confusa minha resposta, mas qualquer coisa posta ae

Abraços

Conecte ao banco em algum database ja exsitente, com um usuario que tenha privilegios de CREATE DATABASE. Entao use o metodo executeUpdate da classe Statement para a acao. Por exemplo:

...
Statement s = conn.createStatement();
s.executeUpdate("CREATE DATABASE novoDb");
s.close();
...

Rafael

Rafael,

no caso eu realizei um teste com o banco de dados firebird (pois atualmente ele é o meu objetivo). Me conectei a uma tabela de exemplos chamada employe.fdb com o usuário sysdba e a senha masterkey (Este usuário é o que vem com o firebird, e tem permissão para criar tabela), e executei o seguinte comando:

CREATE DATABASE ‘testedb’

Coloquei as aspas simples, pq tava dando erro de token. Depois de executar o sistema, ocorreu o seguinte erro:

org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error
SQL error code = -530
Cannot prepare a CREATE DATABASE/SCHEMA statement
at org.firebirdsql.jdbc.AbstractStatement.executeUpdate(AbstractStatement.java:203)
at br.com.mprnet.administrabd.firebird.BancoDadosHelper.construirBancoDados(BancoDadosHelper.java:49)
at br.com.mprnet.administrabd.sistemas.swing.telas.Principal.main(Principal.java:41)
at org.firebirdsql.gds.GDSException: Dynamic SQL Error
SQL error code = -530
Cannot prepare a CREATE DATABASE/SCHEMA statement
at org.firebirdsql.jgds.GDS_Impl.readStatusVector(GDS_Impl.java:1759)
at org.firebirdsql.jgds.GDS_Impl.receiveResponse(GDS_Impl.java:1712)
at org.firebirdsql.jgds.GDS_Impl.isc_dsql_prepare(GDS_Impl.java:1224)
at org.firebirdsql.jca.FBManagedConnection.prepareSQL(FBManagedConnection.java:750)
at org.firebirdsql.jdbc.AbstractConnection.prepareSQL(AbstractConnection.java:942)
at org.firebirdsql.jdbc.AbstractStatement.prepareFixedStatement(AbstractStatement.java:1035)
at org.firebirdsql.jdbc.AbstractStatement.internalExecute(AbstractStatement.java:1022)
at org.firebirdsql.jdbc.AbstractStatement.executeUpdate(AbstractStatement.java:198)
at br.com.mprnet.administrabd.firebird.BancoDadosHelper.construirBancoDados(BancoDadosHelper.java:49)
at br.com.mprnet.administrabd.sistemas.swing.telas.Principal.main(Principal.java:41)

Teria alguma ideia de qual pode ser o problema?

Pessoal,

estou enviando esta mensagem para informar que consegui criar um banco de dados no Firebird via jdbc

No caso do Firebird, é necessário utilizar uma classe própria chamada FBManager, que fica dentro do pacote org.firebirdsql.management. Esta classe é resposável por criar banco de dados, excluir etc, sem ser necessário se conectar há alguma tabela. Ele se conecta somente ao servidor. Eu achei esta solução no fac que vem dentro do diretório doc do driver jdbc jaybird. Como eu sei que é difícil encontrar explicações sobre criação de banco de dados via código java na internet, vou deixar registrado aqui um exemplo, para facilitar a vida de quem vier a precisar deste recurso.
Segue abaixo um código de exemplo:

/*

  • BancoDadosHelper.java
  • Created on 27 de Fevereiro de 2005, 10:02
    */

package br.com.mprnet.administrabd.firebird;

import java.sql.Connection;
import java.sql.Statement;
import org.firebirdsql.management.FBManager;

/**
*

  • @author caio
    */
    public class BancoDadosHelper implements br.com.mprnet.BancoDadosHelper {

public void construirBancoDados()
throws java.lang.Exception, java.sql.SQLException {

FBManager fbManager = new FBManager();
fbManager.setServer(“localhost”);
fbManager.setPort(3050);
fbManager.start();

fbManager.createDatabase("/home/firebird/testebd.fdb",
“sysdba”, “******”);
fbManager.stop();

/*

  • Conecta com o banco de dados e atualiza o character_set.
    */
    Connection con = Conexao.conecta(bancoDados);
    Statement stm = con.createStatement();
    stm.executeUpdate(“UPDATE rdb$database SET rdb$character_set_name=‘WIN3250’”);
    }

.
.
.
}

valeuuu!! :smiley:

Ola galera, eu estou com um problema semelhante. Faz alguns dias que eu estou tentando gerar as tabelas de um banco de dados via java mas nao esta dando certo. No meu sistema eu preciso puxar o sql de uma arquivo sql. O SQL e transformado em string e esta é inserida em prepareStatement. Mas o JDBC sempre envia uma mensagem de erro! Se alguem puder me ajudar eu agradeço.

meu arquivo sql e mais ou menos esse…

/*
Definition of table `P3`.`clientes`
*/

DROP TABLE IF EXISTS `P3`.`clientes`;
CREATE TABLE  `P3`.`clientes` (
  `id` int(15) unsigned zerofill NOT NULL auto_increment,
  `nome` varchar(60) NOT NULL,
  `nasc` date default NULL,
  `ident` varchar(20) default NULL,
  `cpf` varchar(20) default NULL,
  `end` varchar(60) default NULL,
  `compl` varchar(30) default NULL,
  `bairro` varchar(30) default NULL,
  `cep` varchar(20) default NULL,
  `cidade` varchar(30) default NULL,
  `estado` varchar(30) default NULL,
  `pais` varchar(20) default NULL,
  `emp` varchar(60) default NULL,
  `cargo` varchar(30) default NULL,
  `fone` varchar(20) default NULL,
  `email` varchar(30) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*
Definition of table `P3`.`desp_fornecedores`
*/

DROP TABLE IF EXISTS `P3`.`desp_fornecedores`;
CREATE TABLE  `P3`.`desp_fornecedores` (
  `id` int(15) unsigned zerofill NOT NULL auto_increment,
  `nome` varchar(60) NOT NULL,
  `fone` varchar(20) default NULL,
  `end` varchar(60) default NULL,
  `obs` tinytext,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*
Definition of table `P3`.`desp_grupos`
*/
...

O Erro retornado e esse:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘CREATE TABLE P3.clientes (
id int(15) unsigned zerofill NOT NULL auto_i’ at line 6
listeners.RequestListener.requestInitialized(RequestListener.java:57)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:574)
org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1527)
java.lang.Thread.run(Thread.java:619)

eu não entendo porque esta dando erro! Se alguem puder me ajudar a localizar a causa do problema eu agradeço.

Não entendo muito de MySQL mas, parece que o trecho SQL indicado tem algum erro, já tentou executar num front-end esse mesmo código? Pra quem usa netBeans tem um modulozinho pra SQL que vc pode inserir codigo e testar, e tem o DBDesigner também.
Pode ser a versão do seu JDBC também que pode estar bugada, nesse caso tente usar uma outra versão, de preferencia mais recente…

ao conectar no banco de dados.
deve haver uma sintaxe como “create=true;”

isso no caminho da url…
ex:
“jdbc:derby:C:/SEUCAMINHO/NOMEDOBANCO;create=true”

no derby sei que funciona… tem que ver se a sintaxe eh a mesma para outros bancos.

Se quiser criar uma base de dados:

Exemplo utilizando MySql:

Conn = DriverManager.getConnection ("jdbc:mysql://localhost/?user=root&password=rootpassword"); s=Conn.createStatement(); int Result=s.executeUpdate("CREATE DATABASE databasename");

referências:

http://forums.mysql.com/read.php?39,99321,102211#msg-102211

caiosiqueira
A logica esta correta, voce se conecta oa banco de dados e ai cria o seu, o erro que apareceu é por que o
nome do banco esta errado .
Use assim

String dbDriver = “org.firebirdsql.jdbc.FBDriver”;
String dbUrl = “jdbc:firebirdsql:localhost/3050:C:/Program Files/Firebird/Firebird_2_5/examples/empbuild/EMPLOYEE.FDB”;
String dbUser = “SYSDBA”;
String dbPwd = “masterkey”;

Class.forName(dbDriver);
conn = DriverManager.getConnection(dbUrl,dbUser,dbPwd);

Estou migrando o projeto do Derby para o FireBird , acho que sua conexão esta certo o problema foi que faltou uma letra na sua string
EMPLOYEE é com dois E’s.

C:/ é onde esta instalado o seu banco