Dúvida mortal netbeans e H2database[RESOLVIDO]

2 respostas
psicoppardo

estou aprendendo a usar netbeans com o banco h2database. Mas quando tento vincular a JTable com o BD, não tenho sucesso aparece esse erro:

run:
Fev 20, 2012 9:39:49 PM org.hibernate.cfg.annotations.Version <clinit>
Informações: Hibernate Annotations 3.3.1.GA
Fev 20, 2012 9:39:50 PM org.hibernate.cfg.Environment <clinit>
Informações: Hibernate 3.2.0
Fev 20, 2012 9:39:50 PM org.hibernate.cfg.Environment <clinit>
Informações: hibernate.properties not found
Fev 20, 2012 9:39:50 PM org.hibernate.cfg.Environment buildBytecodeProvider
Informações: Bytecode provider name : cglib
Fev 20, 2012 9:39:50 PM org.hibernate.cfg.Environment <clinit>
Informações: using JDK 1.4 java.sql.Timestamp handling
Fev 20, 2012 9:39:50 PM org.hibernate.ejb.Version <clinit>
Informações: Hibernate EntityManager 3.3.2.GA
Fev 20, 2012 9:39:51 PM org.hibernate.cfg.AnnotationBinder bindClass
Informações: Binding entity from annotated class: h2database.java.visao.Exemplo
Fev 20, 2012 9:39:51 PM org.hibernate.cfg.annotations.QueryBinder bindQuery
Informações: Binding Named query: Exemplo.findAll => SELECT e FROM Exemplo e
Fev 20, 2012 9:39:51 PM org.hibernate.cfg.annotations.QueryBinder bindQuery
Informações: Binding Named query: Exemplo.findById => SELECT e FROM Exemplo e WHERE e.id = :id
Fev 20, 2012 9:39:51 PM org.hibernate.cfg.annotations.QueryBinder bindQuery
Informações: Binding Named query: Exemplo.findByNome => SELECT e FROM Exemplo e WHERE e.nome = :nome
Fev 20, 2012 9:39:51 PM org.hibernate.cfg.annotations.EntityBinder bindTable
Informações: Bind entity h2database.java.visao.Exemplo on table EXEMPLO
Fev 20, 2012 9:39:51 PM org.hibernate.cfg.AnnotationConfiguration secondPassCompile
Informações: Hibernate Validator not found: ignoring
Fev 20, 2012 9:39:52 PM org.hibernate.connection.DriverManagerConnectionProvider configure
Informações: Using Hibernate built-in connection pool (not for production use!)
Fev 20, 2012 9:39:52 PM org.hibernate.connection.DriverManagerConnectionProvider configure
Informações: Hibernate connection pool size: 20
Fev 20, 2012 9:39:52 PM org.hibernate.connection.DriverManagerConnectionProvider configure
Informações: autocommit mode: true
Fev 20, 2012 9:39:52 PM org.hibernate.connection.DriverManagerConnectionProvider configure
Informações: using driver: org.h2.Driver at URL: jdbc:h2:D:~\test
Fev 20, 2012 9:39:52 PM org.hibernate.connection.DriverManagerConnectionProvider configure
Informações: connection properties: {user=sa, dialect=org.hibernate.dialect.H2Dialect, autocommit=true, release_mode=auto}
Fev 20, 2012 9:39:55 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: RDBMS: H2, version: 1.3.163 (2011-12-30)
Fev 20, 2012 9:39:55 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: JDBC driver: H2 JDBC Driver, version: 1.3.163 (2011-12-30)
Exception in thread "AWT-EventQueue-0" javax.persistence.PersistenceException: No Persistence provider for EntityManager named HibernateJPAPU: Provider named org.hibernate.ejb.HibernatePersistence threw unexpected exception at create EntityManagerFactory: 
javax.persistence.PersistenceException
javax.persistence.PersistenceException: [PersistenceUnit: HibernateJPAPU] Unable to build EntityManagerFactory
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:110)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)
	at h2database.NewApplication.initComponents(NewApplication.java:32)
	at h2database.NewApplication.<init>(NewApplication.java:17)
	at h2database.NewApplication$2.run(NewApplication.java:204)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
	at java.awt.EventQueue.access$000(EventQueue.java:101)
	at java.awt.EventQueue$3.run(EventQueue.java:666)
	at java.awt.EventQueue$3.run(EventQueue.java:664)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: org.hibernate.HibernateException: Hibernate Dialect must be explicitly set for database: H2
	at org.hibernate.dialect.DialectFactory.determineDialect(DialectFactory.java:62)
	at org.hibernate.dialect.DialectFactory.buildDialect(DialectFactory.java:39)
	at org.hibernate.cfg.SettingsFactory.determineDialect(SettingsFactory.java:409)
	at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:119)
	at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1933)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1216)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
	... 20 more


 The following providers:
oracle.toplink.essentials.PersistenceProvider
org.eclipse.persistence.jpa.PersistenceProvider
oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider
Returned null to createEntityManagerFactory.

	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:154)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)
	at h2database.NewApplication.initComponents(NewApplication.java:32)
	at h2database.NewApplication.<init>(NewApplication.java:17)
	at h2database.NewApplication$2.run(NewApplication.java:204)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
	at java.awt.EventQueue.access$000(EventQueue.java:101)
	at java.awt.EventQueue$3.run(EventQueue.java:666)
	at java.awt.EventQueue$3.run(EventQueue.java:664)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
CONSTRUÍDO COM SUCESSO (tempo total: 10 segundos)

Não entendo quando faço a mesma coisa com MySQL funciona direitinho, segue uma imagem da minha tela do aplicativo, será que para programar com H2 preciso usar código puro, sem os benefícios do netbeans?

2 Respostas

psicoppardo

Analisando a saída, vi que ele faz referências ao hibernate como um servidor externo talvez esteja errado, mas acredito que estou fazendo da forma errado seria mais interessante criar eu mesmo a EntityManager e a classe conexao com o banco, mas como linkalas através swing do netbeans?

psicoppardo

Meus problemas terminaram em parte usando o NETBEANS, usar um classe modelo para leitura do DB

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package app.conexao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;

/**
*
* @author Jose Pedro de Oliveira Junior
*/
public class ConexaoH2
{
/**
* Connect to database
* @return Connection to database
* @throws java.lang.Exception
*/
public Connection dbConnection()throws Exception
{
Class.forName("org.h2.Driver");
String DATABASE = "jdbc:h2:D:~/test";
String USER = "sa";
String PASS = "";
return DriverManager.getConnection(DATABASE,USER,PASS);
}

/**
* Este metodo irá carregar todos os dados da tabela em um vector de vector de uma string e coloca-los em um vector
* @return vector of vector of string
* @throws java.lang.Exception
*/
public Vector getEmployee()throws Exception
{
Vector<Vector<String>> employeeVector = new Vector<Vector<String>>();

Connection conn = dbConnection();
PreparedStatement pre = conn.prepareStatement("SELECT * FROM exemplo");

ResultSet rs = pre.executeQuery();

while(rs.next())
{
Vector<String> employee = new Vector<String>();
employee.add(rs.getString(1)); //ID
employee.add(rs.getString(2)); //name

employeeVector.add(employee);
}

/*Fecha a conexao depois do uso. (isso é muito importante se tratando de bancos de dados embutidos)*/
if(conn!=null)
conn.close();

return employeeVector;
}
}

depois disso só foi adicionar uma jtabel em JFrame.

com um construtor personalizado.

private Vector<Vector<String>> data; //used for data from database
    private Vector<String> header; //used to store data header

     
    /**
     * Construtor da Classe JFTabelaH2
     */
    public JFTabelaH2() throws Exception{

        //get data from database
        ConexaoH2 dbengine = new ConexaoH2();
        data = dbengine.getEmployee();

        //create header for the table
        header = new Vector<String>();
        header.add("ID"); //retorna o id
        header.add("Nome"); // retorna o nome
        

        initComponents();
}

depois disso adicionei uma jtabel (nome tabela), nela personalizei o código para

tabela.setModel(new javax.swing.table.DefaultTableModel(
    data, header
));

Dessa maneira consegui ver os dados em uma tabela com as facilidades do NETBEANS, mas ainda falta fazer o CRUD, mas já é uma primeira vitória. Coloquei essas soluções aqui, pois pode mais alguém está passando pela mesma dificuldade que eu.

Criado 20 de fevereiro de 2012
Ultima resposta 29 de fev. de 2012
Respostas 2
Participantes 1