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
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();
...
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)
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:
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’”);
}
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.
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…
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
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.