[OFF TOPIC] Iniciando o H2 DB pela aplicação J2SE

Salve galera…após muito pesquisar acabei encontrando uma maneira de iniciar o H2 Database pela aplicação.

segue como fazer.

public class Conexao {
      
public static Connection getConnection() throws SQLException{
 try {
         Class.forName("org.h2.Driver");  //driver para h2 db
         return DriverManager.getConnection("jdbc:h2:tcp://localhost:9001/db/meudb","sa","123");  //retorna conexao h2 db
 }catch (ClassNotFoundException e) {
            JOptionPane.showMessageDialog(null, e.getMessage());            
            throw new SQLException();            
 }        

}



public static void main(String[] args){
        //inicia o servidor e testa a conexao tcp com h2 db
        try {
           Server s = Server.createTcpServer(new String[]{"-tcp","-tcpAllowOthers","-tcpPort","9001","-trace"}); //aqui crio e defino o servidor TCP com seus parametros
           s.start(); //inicia o servidor
           Connection con = Conexao.getConnection();
           PreparedStatement stm = con.prepareStatement("SELECT * FROM usuarios");
           ResultSet rs = stm.executeQuery();
           while(rs.next()){
               System.out.println(rs.getString("loginUsuario"));
           }           
        } catch (SQLException ex) {
            Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, ex);
        }
       
    }


}

Eh isso.

t+ e boa sorte !

fernandopaiva,

Estou utilizando o H2 em um projeto desktop, sendo quando vou instalar o projeto em outra máquina, tenho que colocar a pasta que se refere ao banco no diretório correto e instalar o H2 também, como posso instalar a aplicação sem a necessidade de realizar esses dois procedimentos?

No aguardo.

Ola fernando é raghy quem fala. já trocamos boas informações em outro momento. como estás tudo bem? bons negócios… ? Espero que esteja tudo bem.

De fato agora resolvi incorporar o h2 as minhas aplicações, pois quis passar a meus colegas uma simples agenda que fiz, mas que depende de BD( bancodedados) e
lembrei de incorporar o banco…

fiz o teste da sua classe. mas tive problemas … aqui:

try {  
           Server s = Server.createTcpServer(new String[]{"-tcp","-tcpAllowOthers","-tcpPort","9001","-trace"}); //aqui crio e defino o servidor TCP com seus parametros  
           s.start(); //inicia o servidor  

acho que tenho que instalar o h2 no netbeans??

ele será incorporado automaticamente ao programa ou somente se o exportar em um . exe ??

grato.

ESTOU NESTE TÓPICO TB, SOBRE ESTE ASSUNTO.

http://www.guj.com.br/java/303330-incorporar-banco-de-dados-h2-em-uma-aplicacao

primeiro vc temq baixar o arquivo .ZIP disponivel neste site http://www.h2database.com/html/main.html
logo, descompacte e adicione a livraria h2-1.3.173.jar ao seu projeto,
logo no seu main ou antes de iniciar seu banco vc pode inicializar e startar uma instancia do servidor, por exemplo, eu faço assim:

Server server;
server = Server.createTcpServer(new String[]{"-tcpAllowOthers"}).start(); //aqui inicio um novo servidor tcp e permito que ele seja acessivel desde qualquer outro pc na rede
server = Server.createWebServer().start();  // aqui eu inicio o servidor web inbutido para ser acessivel desde http://localhost:8082, e acesivel desde qualquer outro pc na rede

dialetos e exemplo de url se estiver usando o hibernate

hibernate.dialect = org.hibernate.dialect.H2Dialect // dialeto
hibernate.connection.driver_class = org.h2.Driver //driver_class
hibernate.connection.url = jdbc:h2:tcp://localhost/C:\\PastaDoPrograma\\NomeDoArqivoDeBancoDeDados
// no caso //localhost/ vc substituii pelo IP do pc que tenha o Banco
// e no restante vc digita o caminho absoluto para o arquivo que contem o Banco De Dados

hibernate.connection.username=root
hibernate.connection.password=password
hibernate.current_session_context_class = thread

hibernate.hbm2ddl.auto = update //gera e atualiza automaticamente as tabelas do banco pra vc

espero q seja d ajuda… flw…

grato.

bem consegui um bom avanço aqui, segue o código, mas ele sempre cria um novo banco… já funciona… agora vou ver os comandos (são iguais?)
e também como usar um banco pronto… ???

[code]
/*

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

/*

  • Copyright 2004-2013 H2 Group. Multiple-Licensed under the H2 License,
  • Version 1.0, and under the Eclipse Public License, Version 1.0
  • (http://h2database.com/html/license.html).
  • Initial Developer: H2 Group
    */

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.h2.tools.DeleteDbFiles;

/**

  • A very simple class that shows how to load the driver, create a database,

  • create a table, and insert some data.
    */
    public class ASD {

    /**

    • Called when ran from command line.

    • @param args ignored
      */
      public static void main(String… args) throws Exception {
      // delete the database named ‘test’ in the user home directory
      DeleteDbFiles.execute("~", “test”, true);

      Class.forName(“org.h2.Driver”);
      Connection conn = DriverManager.getConnection(“jdbc:h2:~/test”);
      Statement stat = conn.createStatement();

      //this line would initialize the database
      //from the SQL script file ‘init.sql’
      // stat.execute(“runscript from ‘init.sql’”);
      stat.execute(“create table test(id int primary key, name varchar(255))”);

       stat.execute("insert into test values(3, 'Hello3')");
      

      stat.execute(“insert into test values(5, ‘Hello5’)”);
      stat.execute(“insert into test values(4, ‘Hello4’)”);
      ResultSet rs;
      rs = stat.executeQuery(“select * from test”);
      while (rs.next()) {
      System.out.println(rs.getString(“name”));
      }
      stat.close();
      conn.close();
      rs.close();
      }

}[/code]

tudo com isso com esse jar na biblioteca ou não funciona… quando exportar o mysql estará embutido??? isso que ainda vou ver como.

fiz um teste com mysql segue código, tenho um banco em mysql, poderei usar com h2?
acho que não, mas fica a dúvida…
só quero exportar este banco mysql pronto junto com o jar…

[code]/*

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

/*

  • Copyright 2004-2013 H2 Group. Multiple-Licensed under the H2 License,
  • Version 1.0, and under the Eclipse Public License, Version 1.0
  • (http://h2database.com/html/license.html).
  • Initial Developer: H2 Group
    */

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.h2.tools.DeleteDbFiles;

/**

  • A very simple class that shows how to load the driver, create a database,

  • create a table, and insert some data.
    */
    public class ASD {

    /**

    • Called when ran from command line.
    • @param args ignored
      */
      public static void main(String… args) throws Exception {
      // delete the database named ‘test’ in the user home directory
      DeleteDbFiles.execute("~", “test”, true);

    // String url = “jdbc:h2:/data/sample;IFEXISTS=TRUE”;

     Class.forName("org.h2.Driver");
    

    // Connection conn = DriverManager.getConnection(“jdbc:h2:~/test;IFEXISTS=TRUE”);
    // Connection conn = DriverManager.getConnection(“jdbc:h2:~/test”);
    //Connection conn = DriverManager.getConnection(“jdbc:h2:localhost:3306/bancoagenda”);

         Class.forName("com.mysql.jdbc.Driver");
         String url ="jdbc:mysql://localhost:3306/bancoagenda";
         Connection conn  = DriverManager.getConnection(url,"root","");
     
     Statement stat = conn.createStatement();
    
     //this line would initialize the database
     //from the SQL script file 'init.sql'
    // stat.execute("runscript from 'init.sql'");
    

    /* stat.execute(“create table test(id int primary key, name varchar(255))”);
    stat.execute(“insert into test values(3, ‘Hello3’)”);
    stat.execute(“insert into test values(5, ‘Hello5’)”);
    stat.execute(“insert into test values(4, ‘Hello4’)”);*/
    ResultSet rs;
    rs = stat.executeQuery(“select * from dados”);
    while (rs.next()) {
    System.out.println(rs.getString(“nome”));
    }
    stat.close();
    conn.close();
    rs.close();
    }

    //localhost:3306/bancoagenda

}[/code]

os comando sao praticamente iguais aos do mysql com algumas excecoes,

ele sempre cria um novo banco pq na linha 34 vc disse pra ele deletar o arquivo do banco exclua essa linha

ele sempre cria uma nova tabela pq toda vez q vc roda seu codigo vc obriga ele a criar uma nova tabela na linha 43

em vez disso vc poderia fazer assim para ele criar a tabela, se ela não existir

se vc abrir o arquivo .jar (h2-1.3.17x.jar), ele automaticamente inicia o serviço de banco de dados e tambem abre uma página web imbutida (console) para administracao do banco local ou remoto eh so inserir o endereço do banco exemplo:

Driver Class:	org.h2.Driver
JDBC URL:         jdbc:h2:tcp://localhost/C:\\Documents\\SuaCompanhia\\BancoDeDados
// outro exemplo de URL    jdbc:h2:tcp://IPDoServidor/C:\\nomeDaPasta\\NomeDoArquivoDoBancoDeDados

certo consegui conexao e tenho obtido algum progresso nesta criação automática de tabelas, etc…

mas se tenho dados embutidos em um projeto não vou querer apagar estes dados toda hora, certo ?
isto não acontecerá se sempre crio o banco ou uma tabela nova a toda hora??

e além do mais onde ficam armazenados estes dados de fato do banco ??
tentei incorporar algum banco .sql para aproveitar dados, tb não obtive Êxito.

Enfim quero entender como o banco vai ficar embutido no jar, e vai funcionar, independentemente de banco de dados…
armazenar e guardar dados independentemente de mysql instalado no computador por exemplo.

se puder me ajudar agradeço, continuo fazendo meus testes…

inclusive no h2, nos comandos vistos através do help.
não vejo como criar um novo banco, apenas um novo schema…
só é possível um banco??

tb

este arquivo importaria dados sql de um banco??

não tenho no momento achado meus arquivos sql, do banco, não estão na pasta mysql.