[DÚVIDA] Startar HSQLDB em classe JAVA

6 respostas
T

Olá todos, pesquisei na documentação do HSQLDB como dar um start no Banco em uma classe java. Mas não achei nada parecido, vi alguns post na internet, mas nenhum fala o que eu preciso.

Muitas pessoas fizeram tutoriais de como fazer a conexão, mas essa parte está pronta já. Só nao quero abrir um terminar e fazer o start via comando pra minha conexão funcionar. Quero que faça esse start “sozinho”.

6 Respostas

jMarcel

Você pode criar um serviço no SO e configura-lo para ser iniciado quando do carregamento do sistema.

Para fazer isso, temos, por exemplo:

  1. srvany.exe --> (http://www.vogella.de/articles/ApacheDerby/article.html#service)
  2. Java Service Launcher (JSL) --> (http://sourceforge.net/projects/jslwin)
  3. Java Service Wrapper by Tanuki Software --> (http://wrapper.tanukisoftware.org/doc/english/index.html)

Até breve.

T

Vixi, vou distribuir minha aplicação pra várias pessoas, não queria mexer no SO delas. Mas vou dar uma olhada nesses links

Tnks

jMarcel

Entendo.

Então olhe o fonte aqui: http://www.guj.com.br/java/133798-iniciar-hsqldb-server-no-codigo-e-criar-novo-usuario-ao-iniciar-a-session-do-hibernate

jMarcel

Dica: abra o hsqldb.jar com o Netbeans, por exemplo, e localize o método main a que se refere o runServer.bat.

Pelo script de batch analisei que temos o seguinte:

java -cp …/lib/hsqldb.jar org.hsqldb.Server -database.0 file:mydb -dbname.0 xdb

Ou seja, este comando mostra que org.hsqldb.Server tem um método [color=blue]public void static main(String[] args)[/color]. Cada argument fornecido é membro de um array. Daí esbocei o seguinte:

public void startHsqlDb(){ try{ org.hsqldb.Server.main(new String[]{"-database.0", "file:mydb", ...}); } catch(ExceptionNecessariaCapturada netbc){ // vc sabe o q fazer aqui } }

Mas não sei se essa é a melhor forma de inicializar o servidor.

Estude http://www.hsqldb.org/doc/src/org/hsqldb/Server.html

E viva o Open Source !

T

Consegui fazer ele startar por uma classe:

public static void startDB(){
			
		try{
			 
			org.hsqldb.Server.main(new String[]{"-database.0", "file:cartao", "-dbname.0", "cartao"});
		}
		catch(Exception e){
			   
			JOptionPane.showMessageDialog(null,"Erro ao abrir DB = "+e);
		}
	}

Agora não acho minhas tabelas ...

org.hibernate.exception.SQLGrammarException: could not execute query
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.loader.Loader.doList(Loader.java:2536)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
	at org.hibernate.loader.Loader.list(Loader.java:2271)
	at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452)
	at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
	at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268)
	at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
	at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:890)
	at br.com.fastway.cobranca.hibernatedao.UsuarioDAO.getByLogin(UsuarioDAO.java:57)
	at org.apache.jsp.index_jsp._jspService(org.apache.jsp.index_jsp:85)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:486)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:380)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:534)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1352)
	at br.com.fastway.common.HibernateTransaction.doFilter(HibernateTransaction.java:39)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1323)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:474)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:517)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:934)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:404)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:184)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:869)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
	at org.eclipse.jetty.server.Server.handle(Server.java:346)
	at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:581)
	at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1057)
	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:807)
	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:220)
	at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:411)
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:526)
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:41)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:528)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.sql.SQLException: user lacks privilege or object not found: USUARIO
	at org.hsqldb.jdbc.Util.sqlException(Util.java:215)
	at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(JDBCPreparedStatement.java:3957)
	at org.hsqldb.jdbc.JDBCConnection.prepareStatement(JDBCConnection.java:637)
	at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:534)
	at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:452)
	at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161)
	at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1700)
	at org.hibernate.loader.Loader.doQuery(Loader.java:801)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
	at org.hibernate.loader.Loader.doList(Loader.java:2533)

Li ambos sites, e mesmo assim ... nada

jMarcel

Você tem que informar a onde está localizado a pasta do seu BD.

Criado 31 de março de 2011
Ultima resposta 20 de abr. de 2011
Respostas 6
Participantes 2