amir samary - curso de caché com java v3
DESCRIPTION
Apostila de Cache com JavaTRANSCRIPT
-
InterSystems Cach - JavaAmir Samary ([email protected])http://www.intersystems.com.brnews://news.intersystems.comInterSystems Corporation
-
O que faremosParte I: Instalar o Cach e Definir nossas ClassesParte II: Construir uma Aplicao JDBC para listar todos os Cursos cadastrados.Parte III: Construir uma Aplicao acessando o banco via objetos para listar os Alunos de um Curso.
-
Cach e JavaParte ICach
-
O nosso pequeno projeto1..1+Curso
-
O nosso pequeno projeto
-
Agregao
-
Criando a classe AlunoClique no cubo do Cach no System Tray do Windows.Escolha a opo StudioUtilizaremos o Cach Studio toda vez que precisarmos definir classes.
-
Criando a classe AlunoO Studio nos abre um projeto novo e vazio no namespace USER.Vamos criar a nossa classe neste novo projeto
-
Criando a classe AlunoMarque que a classe possui suporte a populao automtica de dados.
-
Criando a classe AlunoClass universidade.Aluno Extends (%Persistent, %Populate) [ ClassType = persistent, Language = Basic, ProcedureBlock ]{
}
Agora s falta definir as propriedades de nossa classe.
-
Criando a classe AlunoClass universidade.Aluno Extends (%Persistent, %Populate) [ ClassType = persistent, Language = Basic, ProcedureBlock ]{Property Nome As %String [ Required ];Property EMail As %String [ Required ];Property Matricula As %Integer [ Required ];
Index MatriculaIndex On Matricula [ Unique ];Index EMailIndex On EMail [ Unique ];}
-
Criando a classe AlunoDepois de ter criado as propriedades, digite CTRL+F7 para compilar a classe.Navegue pela estrutura de pacotes na janela de projetos para encontrar a sua classe.Crie a classe universidade.Curso seguindo os mesmos passos.Salve o seu projeto dando um nome para ele.
-
Definindo um RelacionamentoCrie uma propriedade chamada Curso, na classe Aluno, do tipo Relacionamento
-
Definindo um RelacionamentoCada aluno aponta para um objeto da classe CursoA propriedade inversa AlunosFinish
-
Populando nossas classesCompile as duas classesAmbas as classes herdam de Populate.Ambas as classes possuem agora um mtodo Populate(n), onde n o nmero de objetos a serem criados.Executar Populate(10) em Curso.Executar Populate(100) em Aluno.
-
Populando nossas classes
-
Consultando nossas classesClique no cubo do Cach no System Tray do Windows.Escolha a opo Gerenciador de SQL
-
Consultando nossas classes
-
Cach e JavaParte IIJDBC
-
Conectando via JDBCFaremos uma aplicao Java para Listar os Cursos e outra para mostrar o nome e o curso de um aluno cujo email foi informado.
-
Driver JDBCClasse que implementa a interface JDBCFornecidas pelo vendedor do banco de dadosPermite o acesso ao banco de dadosBanco de Dados CachPacote CacheDB.jar (com.intersys.jdbc.CacheDriver)Suporte a Pool de Conexes
-
Estabelecendo uma ConexoConnection conn = null;try { //registra o driver Cach Class.forName(com.intersys.jdbc.CacheDriver); // URL JDBC para o Cach String url = jdbc:Cache://127.0.0.1:1972/User; String usuario = _system; String senha = sys; //conecta com o banco de dados conn = DriverManager.getConnection(url, usuario, senha);}catch (Exception ex) { }//fechar conexo no finally
-
Executando um Statement...//cria StatementStatement stat = conn.createStatement();//executa queryString query = "select Nome, Codigo from universidade.Curso";ResultSet rs = stat.executeQuery(query);//para cada linha retornada...while (rs.next()){ //apresentar os dados relacionados System.out.println("Cdigo: " + rs.getString(2) + " Nome: " + rs.getString(1));}//fechar o statementstat.close();...
-
Executando um PreparedStatement...//cria PreparedStatementString query=select Nome, Curso->Nome from universidade.Aluno where Email=?;PreparedStatement pstmt = conn.prepareStatement(query);//passando o e-mail da linha de comando para a querypstmt.setString(1, args[0]);//executando a queryResultSet rs = pstmt.executeQuery();if (rs.next()){ //apresenta os dados selecionados System.out.println("Nome: " + rs.getString(1) + " Curso: " + rs.getString(2));}//fechando o PreparedStatementpstmt.close();...
-
Cach e JavaParte IIIObjetos
-
Objetos CachTodas as classes bsicas esto no CacheDB.jarPara obter uma conexo precisamos de:String de conexo (jdbc:Cache://maquina:porta/namespace )UsurioSenhaConexo estabelecida atravs da classe CacheDatabase
-
A classe PersistentTambm est no CacheDB.jar a superclasse de todos os objetos persistentes do CachPossui mtodos para abrir, salvar e apagar objetos, dentre outros.
-
Java BindingAs suas classes no esto no CacheDB.jarElas devem ser projetadas para classes Java e adicionadas ao seu projeto.
-
Como funciona
-
Definindo uma queryVamos criar uma query para listar os CursosO nome de nossa query ser listar
-
Definindo uma queryVamos retornar apenas o ID e o Nome dos objetos
-
Definindo uma queryVamos ordernar apenas por Nome
-
Definindo uma queryClass universidade.Curso Extends (%Persistent, %Populate) [ ClassType = persistent, Language = basic, ProcedureBlock ]{
Query listar() As %SQLQuery(CONTAINID = 1){SELECT %ID,Nome FROM Curso ORDER BY Nome}....CONTAINID aponta para o ndice da coluna no SELECT que contm o ID do objetoNo se esquea de compilar a sua classe (CTRL+F7)!
-
Definindo a ProjeoUma vez definida, toda vez que compilarmos a classe, um .java correspondente ser gerado em disco
-
Definindo a Projeo aconselhvel que esta projeo seja definida em cada classe.Compile as suas classes (CTRL+F7) e veja o resultado na pasta c:\Projetos!
Class universidade.Curso Extends (%Persistent, %Populate) [ ClassType = persistent, Language = Basic, ProcedureBlock ]{
Projection JavaProj As %Projection.Java(ROOTDIR = c:\Projeto");
....
-
Estabelecendo uma ConexoDatabase db = null;try { // URL JDBC para o Cach String url = jdbc:Cache://127.0.0.1:1972/User; String usuario = _system; String senha = sys; //conecta com o banco de dados db = CacheDatabase.getDatabase (url, usuario, senha);}catch (Exception ex) {}//fechar database no finally
-
Executando uma query// preciso passar o database como primeiro // argumento de todo mtodo de classe.
CacheQuery cq = Curso.query_listar(db);
// ResultSet do pacote java.sql// Neste caso, o a nossa query no recebe argumento algum.ResultSet rs = cq.execute();while (rs.next()){System.out.println(rs.getString(1) + " - " + rs.getString(2));}
// No se esquea de fechar o ResultSet!rs.close();
-
Abrindo um Objeto// preciso passar o database como primeiro // argumento de todo mtodo de classe.// Um id deve ser encapsulado em um objeto da classe Id()
Curso curso = (Curso) Curso._open(db, new Id(1));
if (curso!=null) {System.out.println("Nome do curso: " + curso.getNome());}
// No preciso fechar o objeto aberto// Fechamos apenas Connections, Databases, ResultSets,// Statements, etc...
-
Criando um Objeto// preciso passar o database tambm para os construtores// de objetos recm criados
Curso curso = new Curso(db);
// O Cach gera os mtodos set e get para cada propriedade da classecurso.setNome("Cach University");curso.setCodigo(new Integer(1972));
// Uma CacheException pode ser disparada durante o salvamentocurso._save();
// No preciso fechar o objeto aberto// Fechamos apenas Connections, Databases, ResultSets,// Statements, etc...
-
Criando um Mtodo de ClasseClass universidade.Curso Extends (%Persistent, %Populate) [ ClassType = persistent, ProcedureBlock ]{
ClassMethod RecuperarPorCodigo(cod As %Integer) As universidade.Curso [Language = basic ] { Set rs = New %ResultSet() rs.Prepare("select ID from universidade.Curso where codigo=?") rs.Execute(cod) If rs.Next() Then Return Me.%OpenId(rs.Get("ID")) End If Return ""}....
-
Executando um mtodo de classe// preciso passar o database tambm para os construtores// de objetos recm criados
Curso curso = (Curso) Curso.RecuperarPorCodigo(db, new Integer(123));
if (curso!=null) {System.out.println("Nome do curso: " + curso.getNome());}
// No preciso fechar o objeto aberto// Fechamos apenas Connections, Databases, ResultSets,// Statements, etc...
-
Criando um Mtodo de Classe JavaClass universidade.Curso Extends (%Persistent, %Populate) [ ClassType = persistent, ProcedureBlock ]{
Method toString() As %String [Language = java ] { try { return this.getNome(); } catch (Exception e) {} return ; }....
-
Executando um mtodo de classe// preciso passar o database tambm para os construtores// de objetos recm criados
Curso curso = (Curso) Curso.RecuperarPorCodigo(db, new Integer(123));
if (curso!=null) {System.out.println("Nome do curso: " + curso);}
// No preciso fechar o objeto aberto// Fechamos apenas Connections, Databases, ResultSets,// Statements, etc...
-
TransaesNo JDBC voc utiliza mtodos de sua connection para gerenciar transaesQuando trabalha-se com objetos, no usamos uma Connection, mas sim um DatabaseUtilize os mtodos de seu objeto Database atual:public void transationStart()public void transationCommit()public void transationRollback()Todos eles disparam CacheException
-
JavaDoc do CacheDB.jarC:\CacheSys\Dev\Java\doc\index.html
-
InterSystems Cach - JavaAmir Samary ([email protected])http://www.intersystems.com.brnews://news.intersystems.comInterSystems Corporation
O driver JDBC necessrio para traduzir as chamadas a API JDBC para o banco de dados especfico, alm de isolar sua aplicao do banco de dados utilizado.Em verses mais antigas do banco de dados Cach, o driver est no pacote CacheJDBC.jarPara a utilizao da ponte JDBC-ODBC necessrio o registro do banco de dados no ODBC.No trecho de cdigo apresentamos a criao de um objeto Statement, a execuo de uma query utilizando o mtodo executeQuery(), e a apresentao dos resultados obtidos a partir do objeto ResultSet retornado da queryNote o uso dos mtodos getXXX() que tem de estar de acordo com os tipos no banco de dadosOs mtodos no Cach que iniciam com % so traduzidos para _ em Java.Os mtodos no Cach que iniciam com % so traduzidos para _ em Java.Os mtodos no Cach que iniciam com % so traduzidos para _ em Java.