+2

Integrando o PHP com Java (parte 2)

criado por Rodrigo Rodrigues em 26/04/2004 11:58am
Obs: Antes de mostrar os exemplos gostaria de explicar sobre o porque de usar Java+Mysql, eu sei que o PHP tem suporte a várias bases e por isso nem precisaria dessa conexão(Java+Mysql), fiz isto para o sistema ficar mais diferenciado.

Precisamos ter o Driver Mysql para conectar, baixe ele aqui(http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-2.0.14.zip/from/http://www.linorg.usp.br/mysql/), caso não consiga me envie um email que passo pra você.

Faremos nossa classe "ConexaoDB" de Conexão com o Banco Mysql.

ConexaoDB.java
**
package br.com.phpbrasil.artigo;

import java.sql.*;

public class ConexaoDB {
    public static Connection getConexao() {
        Connection con = null;
        try {
            String driver = "org.gjt.mm.mysql.Driver";
            String user = "root";
            String password = "psntmoyc";
            String host = "jdbc:mysql://localhost:3306/phpbrasil_artigo";
		
            Class.forName(driver);
            con = DriverManager.getConnection(host,user,password);
        } catch (SQLException ex) {
            System.out.println(ex);
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return con;
    }

    public static void close(Connection con){
        try {
            con.close();
        } catch(Exception ex){
            System.out.println(ex);
        }
    }
}
**

Nesta classe "ConexaoDB" tem 2 métodos.
Método "getConexao()" é estático do tipo Connection onde nele se usa o "try|catch" isto serve para tratar futuras exceções caso aconteça alguma.
Dentro do Try tem 4 Strings, "driver" é o caminho padrão do Driver Mysql, "user" o usuário que acessa o banco, "password" a senha do usuário e "host" é o caminho do Banco, lembrando que "phpbrasil_artigo" corresponde com a DataBase do Banco.
Usuário e Senha estando ok, retorna a variável "con" do tipo Connection, abre uma conexão com o Mysql.
Método "close(Connection con)" fecha a conexão com o Banco e tem como parametro uma conexão Connection.

Agora criaremos nossas tabelas que serão usadas no sistema, são "PT_USUARIO, MENU e PERMISSAO".
Seu script SQL.
**
CREATE TABLE `pt_usuario` (
  `id_usuario` int(10) unsigned NOT NULL auto_increment,
  `usuario` varchar(32) NOT NULL default '0',
  `senha` varchar(20) NOT NULL default '0',
  `ativo` char(3) NOT NULL default '0',
  PRIMARY KEY  (`id_usuario`,`usuario`)
) TYPE=INNODB;

CREATE TABLE `menu` (
  `id_menu` int(10) unsigned NOT NULL auto_increment,
  `nome_link` varchar(255) NOT NULL default '0',
  `path_link` varchar(255) NOT NULL default '0',
  `ativo` char(3) NOT NULL default '0',
  PRIMARY KEY  (`id_menu`)
) TYPE=INNODB;

CREATE TABLE `permissao` (
  `id_menu` int(10) NOT NULL default '0',
  `id_usuario` int(10) NOT NULL default '0',
  `boolean_permissao` char(3) NOT NULL default '0',
  PRIMARY KEY  (`id_menu`,`id_usuario`)
) TYPE=INNODB;
**

Tabela PT_USUARIO, gravará os usuários que terão acesso no sistema.
Tabela MENU, gravará os caminhos dos links do menu.
Tabela PERMISSAO, gravará as permissões de cada Usuário em cada Link, nele contém as FK's das 2 tabelas(PT_USUARIO, MENU).

Depois de criado as tabelas, inserimos alguns valores.
**
INSERT INTO pt_usuario(usuario,senha,ativo) VALUES("phpbrasil","YXJ0aWdv","sim");
INSERT INTO pt_usuario(usuario,senha,ativo) VALUES("timao","dGltYW8=","sim");
INSERT INTO pt_usuario(usuario,senha,ativo) VALUES("chapolin","Y2hhcG9saW4=","sim");

INSERT INTO menu(nome_link, path_link, ativo) VALUES("Segurança","seguranca.php","sim");
INSERT INTO menu(nome_link, path_link, ativo) VALUES("Corinthians","corinthians.php","sim");
INSERT INTO menu(nome_link, path_link, ativo) VALUES("Chaves e Chapolin","prasempre_ch.php","sim");

INSERT INTO permissao(id_menu, id_usuario, boolean_permissao) VALUES("1","1","sim");
INSERT INTO permissao(id_menu, id_usuario, boolean_permissao) VALUES("2","1","sim");
INSERT INTO permissao(id_menu, id_usuario, boolean_permissao) VALUES("3","1","sim");

INSERT INTO permissao(id_menu, id_usuario, boolean_permissao) VALUES("1","2","nao");
INSERT INTO permissao(id_menu, id_usuario, boolean_permissao) VALUES("2","2","sim");
INSERT INTO permissao(id_menu, id_usuario, boolean_permissao) VALUES("3","2","nao");

INSERT INTO permissao(id_menu, id_usuario, boolean_permissao) VALUES("1","3","nao");
INSERT INTO permissao(id_menu, id_usuario, boolean_permissao) VALUES("2","3","nao");
INSERT INTO permissao(id_menu, id_usuario, boolean_permissao) VALUES("3","3","nao");
**

Os valores do campo "senha" da tabela PT_USUARIO foi usado a função "base64_encode(string)" para criptografia, usando o "base64_encode(string)" retorna o seu valor real.
A tabela PERMISSAO controla todos os acessos dos Usuários nos links do Sistema, o campo "boolean_permissao" fala em qual link tal usuário terá acesso.

Implementaremos agora nossa classe "JavaPHP" com um método "main" para acessarmos a Base.
JavaPHP.java
**
    public static void main(String php[]) {
        final Connection connection = ConexaoDB.getConexao();
        try {
            String pt_usuario = "Mostra os usuarios da Tabela PT_USUARIO\n";
            PreparedStatement preparedStatement = connection.prepareStatement("SELECT usuario, senha FROM pt_usuario");
            ResultSet resultSet = preparedStatement.executeQuery();
            int i = 0;
            while(resultSet.next()){
                pt_usuario += "USUARIO: "+resultSet.getString(1) + "\n";
                i++;
            }
            if (i == 0){
                pt_usuario = "Não foi encontrado nemhum valor.";
            }
            preparedStatement.close();
            resultSet.close();
            System.out.println(pt_usuario);
        } catch(SQLException e) {
            System.out.println(e);
        } finally {
            ConexaoDB.close(connection);
        }
    }
**

Método "main(String php[])" é o principal da Classe Java, para você executar uma aplicação no Java tem que ser dentro de um método main.
Temos uma instância da Conexão(connection) e usamos try|catch|finally para tratar futuros erros(exceções) que venham ter, finally será executado e fechará nossa conexão.
Dentro do Try criamos uma variável(pt_usuario) do Tipo String para receber os valores da base, usamos a Interface "PreparedStatement" para tratar nossa consulta Sql, usamos também a Interface "ResultSet" para pegar o resultados da consulta e finalmente printamos os valores no comando "System.out.println()" do sistema.
Caso entre no Catch printa uma exceção com tal erro de SQL.

Este exemplo servirá como espelho para os restantes dos métodos necessários, na próxima página implementaremos nossa classe com mais métodos.

Comentários:

Mostrando 1 - 9 de 9 comentários
Olá, Rodrigo:
O JavaScript abaixo não roda através do navegador Firefox. Será que VC poderia me ajudar alterando algum(s) parâmetro(s) ? Agradeço desde já = Fiumari:
<script language="JavaScript"> var ultimo=-1, dBanner;
function carrega(x) {dBanner=x;Banners()}
function Banners()
{ var MNews = new Array();
MNews[0]= '<iframe " name="_blank" scrolling="no" src="http://www.finet.com.br/google.htm" width="100%" frameborder="0" target="_blank" height="350" BORDER="0"></iframe><a href="http://www.finet.com.br/google.htm" target="_blank"></a>';
MNews[1]= '<iframe " name="_blank" scrolling="no" src="http://www.finet.com.br/google2.htm" width="100%" frameborder="0" target="_blank" height="350" BORDER="0"></iframe><a href="http://www.finet.com.br/google2.htm" target="_blank"></a>'
while((Numero = parseInt(Math.random()*MNews.length))==ultimo);
dBanner.innerHTML=MNews[Numero];
setTimeout("Banners()",15000);
} </script>
03/09/2007 11:06am (~14 anos atrás)

Prezado amigo,

Li os seus artigos no PHPBRASIL sobre php com java e estão sendo muito úteis para mim. Entretanto estou com uma dúvida terrível e peço sua ajuda.

eu estou usando dois arquivos .jar

httpclient.jar e getUrl.jar

eu coloquei assim no meu php.ini:
java.class.path = "C:\apache\php\JAVA\php_java.jar;C:\apache\php\java_class\getUrl.jar;C:\apache\php\java_class\getUrl.jar\commons-httpclient-2.0.2.jar;C:\apache\php\java_class"
java.home = "C:\j2sdk1.4.2_05\bin"
java.library = "C:\j2sdk1.4.2_05\jre\bin\server\jvm.dll"
java.library.path = "C:\apache\php\extensions"

entretanto quando rodo a página php que eu fiz, ele lança uma ClassNotFound Exception.

vc poderia me dizer como que eu faço para ele encontrar os meus .jar ?

meu php está assim:
<?
$url_final = "http://www.uol.com.br";
$string_url=(String) $url_final;
$getStj = new Java("GetStj");

$html=$getStj->getHtml($string_url);
?>

desde já agradeço imensamente.

Alexandre
23/03/2005 1:02pm (~16 anos atrás)

DAVID disse:
¿qUE SERVIDOR UTILIZAIS APACHE SOLO?
13/05/2004 8:32am (~17 anos atrás)

Nesse link(http://www.phpbrasil.com/scripts/download.php/id/2315) tem a versão "completa" do artigo.
04/05/2004 11:44am (~17 anos atrás)

DAVID disse:
Tengo un proflema tengo una clase java con una función que llama a System.out.println("Hola"); y una pagina php que llama a este método, y el sistema me da un error, si quito esta linea funciona bien. Me gustaría saber si tengo que realizar álgún cambio en la configuración para redireccionar la salida estandard o que muchas gracias y perdon por no hablar portugés
04/05/2004 3:26am (~17 anos atrás)

Bom, com essa integração da pra perceber como pode ser forte o uso combinado dos dois. É claro, que prefiro usar o Mysql com o php e integrar o java para algo livetime, mas seu exemplo é de muito bom tamanho e me mostrou como posso integrar essas duas linguagens poderosas, e que tem, de certo modo, um uso diferente, o que possibilita algo grande e bem feito.
29/04/2004 11:58am (~17 anos atrás)

O artigo devia explorar rapidamente a documentação da parte de SQL em Java, pois isto ficou obscuro e atrapalhou o entendimento do funcionamento da classe JavaPHP criada.
Fora isto, a intenção do artigo foi atingida, deixando claro a integração PHP, Java e MySQL.
parabéns!
27/04/2004 4:44pm (~17 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)