Posts Tagged ‘hsql’

HSQL e PHP

Posted in Java, PHP
Friday February 29th, 2008 01:24 AM

Estes dias me deparei com um problema, precisava fazer somas de colunas de valores expressos em notação monetária brasileira (em real) a partir de uma tabela em hsql.

hsql ou hsqldb é um banco de dados desenvolvido em Java, como ainda não o utilizei intensivamente não tenho uma visão muito clara dele. Mas ele parece ser bem versátil, funciona tanto no modo servidor através do protocolo HTTP, ou com um protocolo próprio, como também no modo embarcado (com menos de 100Kb). Dentre os softwares que estão o utilizando posso citar OpenOffice 2.0, JBoss e aqui no Brasil já encontrei um aplicativo da Receita Federal que também utiliza este BD.

Apesar de ter lido no freshmeat que existia suporte de hsql para PHP, não o encontrei e única solução que me veio a cabeça foi usar a biblioteca JDBC para acessar o banco no php através do suporte a Java no PHP.

Tentei usar a extensão Java com o PHP 5.2.5 no Windows Vista, segui um tutorial do site ONLAMP.com. Só que sempre que criava um objecto Java(), o PHP tinha um crash. Ao buscar por bugs relacionados a isso em bugs.php.net econtrei o #32215: Java Crash onde o Andrey diz que a extensão Java do PHP não é mais mantida e recomenda o uso do PHP/Java Bridge.

Segui o conselho do Andrey, baixei a versão 5.1.2 do PHP/Java Bridge. No site deles a última versão que fazem referência é a 3.2.1 lançada em dezembro de 2006. Mas na área de downloads do projeto no SourceForge.net você encontra versões mais atuais. Tentei usar um tutorial disponível através do site deles para ambiente Windows, sem sucesso. Após algum tempo lendo e pensando em soluções consegui fazer um exemplo bem simples sem usar nenhuma extensão do PHP e que funciona com qualquer JRE (sem a necessidade do JDK).

/**
* Modifications to allow the use of Java by PHP/Java Bridge
*/
require_once( "Java.inc" ); // Content of http://localhost:8080/JavaBridge/java/Java.inc or JavaBridge.jar/META-INF/java/Java.inc

/**
* Example used in PHP.net/Java
*/
// get instance of Java class java.lang.System in PHP
$system = new Java("java.lang.System");

// demonstrate property access
echo 'Java version=' . $system->getProperty('java.version') . '
';
echo 'Java vendor=' . $system->getProperty('java.vendor') . '
';
echo 'OS=' . $system->getProperty('os.name') . ' ' .
$system->getProperty('os.version') . ' on ' .
$system->getProperty('os.arch') . ' ';

// java.util.Date example
$formatter = new Java('java.text.SimpleDateFormat',
"EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz");

echo $formatter->format( new Java( 'java.util.Date' ) );

O arquivo Java.inc se comunida com o serviço do JavaBridge, para iniciar você pode digitar o comando java -jar JavaBridge.jar SERVLET:8080 ou executar o start_javabridge.bat que esta disponível no Exemplo do PHP/Java Bridge.

Depois que o Java deixou de ser um problema o JDBC com o hsql foi tranquilo ;-)

Já que o exemplo ficou muito grande com o JDBC resolvi deixar aqui o link para download: Exemplo do PHP com HSQL através de JDBC. Vale lembrar que este exemplo é facilmente modificado para qualquer banco de dados que tenha suporte JDBC, só não se esqueça de mover o driver correspondente que no exemplo é o arquivo hsqldb.jar para a pasta de extensões da JRE.

Acho que isso é tudo. Abraço!

Bookmarks