Erro ao conectar no banco Derby

3 respostas
M

Boa noite galera,

Sou iniciante no java, estou com um problema para conectar no banco Derby. Instalei o jdk1.6 e o netbeans6 RC1. Criei um banco no proprio derby de dentro no netbeans mesmo. Depois dei “start” la no services e conectei meu banco usando o divrer “org.apache.derby.jdbc.EmbeddedDriver”.
Só que quando tento acessar la da minha classe de conexão está dando um problema :

[list]20/11/2007 00:17:31 javaapplication5.DatabaseConnection getConnection

SEVERE: null

java.sql.SQLException: Failed to start database C:/Temp/ProjetoPSI/BancoDeDados/Livraria, see the next exception for details.

at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)

at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)

at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source)

at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown Source)

at org.apache.derby.impl.jdbc.EmbedConnection.(Unknown Source)

at org.apache.derby.impl.jdbc.EmbedConnection30.(Unknown Source)

at org.apache.derby.impl.jdbc.EmbedConnection40.(Unknown Source)

at org.apache.derby.jdbc.Driver40.getNewEmbedConnection(Unknown Source)

at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)

at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source)

at java.sql.DriverManager.getConnection(DriverManager.java:582)

at java.sql.DriverManager.getConnection(DriverManager.java:207)

at javaapplication5.DatabaseConnection.getConnection(DatabaseConnection.java:78)

at javaapplication5.DatabaseConnection.executeQuery(DatabaseConnection.java:60)

at javaapplication5.Main.main(Main.java:38)

Caused by: java.sql.SQLException: Failed to start database C:/Temp/ProjetoPSI/BancoDeDados/Livraria, see the next exception for details.

at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)

at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source)

 15 more

Caused by: java.sql.SQLException: Another instance of Derby may have already booted the database C:\Temp\ProjetoPSI\BancoDeDados\Livraria.

at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)

at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source)

at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)

at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)

 12 more

Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database C:\Temp\ProjetoPSI\BancoDeDados\Livraria.

at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)

at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(Unknown Source)

at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.getJBMSLockOnDB(Unknown Source)

at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.boot(Unknown Source)

at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)

at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)

at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)

at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)

at org.apache.derby.impl.store.raw.RawStore.boot(Unknown Source)

at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)

at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)

at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)

at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)

at org.apache.derby.impl.store.access.RAMAccessManager.boot(Unknown Source)

at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)

at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)

at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)

at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown Source)

at org.apache.derby.impl.db.BasicDatabase.bootStore(Unknown Source)

at org.apache.derby.impl.db.BasicDatabase.boot(Unknown Source)

at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown Source)

at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)

at org.apache.derby.impl.services.monitor.BaseMonitor.bootService(Unknown Source)

at org.apache.derby.impl.services.monitor.BaseMonitor.startProviderService(Unknown Source)

at org.apache.derby.impl.services.monitor.BaseMonitor.findProviderAndStartService(Unknown Source)

at org.apache.derby.impl.services.monitor.BaseMonitor.startPersistentService(Unknown Source)

at org.apache.derby.iapi.services.monitor.Monitor.startPersistentService(Unknown Source)

 12 more[/list]

Alguem pode me ajudar nisso aí ? Eu já adicionei o derby.jar no meu projeto e tudo mais.

Valeu!!!

3 Respostas

M

Aqui estão os códigos das classes que estou usando:

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

package javaapplication5;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author 
 */
public class DatabaseConnection 
{   
   private static final String URL = "jdbc:derby:C:/Temp/ProjetoPSI/BancoDeDados/Livraria";
      private static Connection connection;
   private static DatabaseConnection instance;   
   
   /**
    * Padrão singleton, utilizado para que exista apenas uma instância de um 
    * determinado objeto na memória. 
    * 
    * Como funciona:
    * - O contrutor privado impede que a classe seja instanciada externamente
    * - A sobrecarga do método clone evita que o objeto seja copiado
    * - Em situações em que é necessário fazer referência ao objeto, deve ser 
    * usado o método getInstance
    */
   private DatabaseConnection()
   {      
   }
   
   @Override
   protected Object clone() throws CloneNotSupportedException
   {
      throw new CloneNotSupportedException();
   }
   
   public static synchronized DatabaseConnection getInstance()
   {
      if(instance == null) 
      {
         instance = new DatabaseConnection();       
      }
      return instance;
   }

   /**
    * Consultas
    */
   public static ResultSet executeQuery(String query) throws SQLException
   {
      return getConnection().createStatement().executeQuery(query);
   }
   
   /**
    * Alterações no banco de dados
    */
   public static void executeUpdate(String query) throws SQLException
   {
      getConnection().createStatement().executeUpdate(query);
   }   
   
   public static Connection getConnection()
   {
      if(connection == null)
      {
            try {

                Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
                connection = DriverManager.getConnection(URL);
            } catch (SQLException ex) {
                Logger.getLogger(DatabaseConnection.class.getName()).log(Level.SEVERE, null, ex);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(DatabaseConnection.class.getName()).log(Level.SEVERE, null, ex);
            }
          
      }      
      return connection;
   }
}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package javaapplication5;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author 
 */
public class Main 
{
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) 
    {
        try {

           PreparedStatement pstmt = null;
           ResultSet rs = DatabaseConnection.executeQuery("select * from tb_cliente");
           
           while(rs.next())
           {
              System.out.println(rs.getString("cpf"));
           }
           
        } catch (SQLException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Valeu... Abraço

M

Alguem pode ajudar???

G

O erro deve ser poquer você está apontando para o drive C:, o Derby deve estar em um servidor de banco.
No meu caso o endereço do servidor é //localhost:1527/rgps_database. Verifique na aba serviços do netbeans.
/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package rgps03;
import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

/**
*

  • @author gilberto.pereira
    
    */
    
    public class Conecta {
    
    private String DRIVER = org.apache.derby.jdbc.EmbeddedDriver;
    
    private String URL = jdbc:derby://localhost:1527/rgps_database”;
    
    private String USERNAME = gilbertoprj;
    
    private String PASSWORD = gp2000;
    
    private String BANCODADOS = TMPCONTRIBUICAO;
    
    private String SQL;
    
    private String sql;
    
    private Connection conn;
    
    private ResultSet rst;
    
    //  A captura de exceções SQLException em Java é obrigatória para
    
    // usarmos JDBC.
    
    public void Conecta() {
    
    try {
    
    Class.forName(this.DRIVER);
    
    this.conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
    
    } catch (ClassNotFoundException e) {
         System.out.println("Não foi possivel encontrar o driver de banco: " + e.getMessage());
     } catch (SQLException e) {
         System.out.println("Erro ao conectar com o banco: " + e.getMessage());
     }
    
    }
    
    public Connection Conecta(Connection conn){
    
    try {
    
    Class.forName(this.DRIVER);
    
    this.conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
    
    return conn;
    
    } catch (ClassNotFoundException e) {
         System.out.println("Não foi possivel encontrar o driver de banco: " + e.getMessage());
         
     } catch (SQLException e) {
         System.out.println("Erro ao conectar com o banco: " + e.getMessage());
         
     }
      return null;
    
    }
    
    public Connection Conectabd() {
    
    try {
    
    Class.forName(this.DRIVER);
    
    this.conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
    
    return conn;
    
    } catch (ClassNotFoundException e) {
    
    System.out.println("Não foi possivel encontrar o driver de banco: " + e.getMessage());
    
    return null;
    
    } catch (SQLException e) {
    
    System.out.println("Erro ao conectar com o banco: " + e.getMessage());
    
    return null;
    
    }
    
    }
    
    public ResultSet pegaLinhas(String valor) throws SQLException {
    
    // define a sql a ser executada
    
    conn = Conectabd();
    
    if (valor.equals(todos)) {
    
    //sql = " Select * from " + this.BANCODADOS;
    
    sql = select * from GILBERTOPRJ.TMPCONTRIBUICAO;
    
    }
    
    try
    
    {
    
    Statement stm = conn.createStatement();
    
    // Definido o Statement, executamos a query no banco de dados
    
    rst = stm.executeQuery(sql);
    
    } catch (SQLException ex) {
    
    System.out.println(" Houve erro no carregamento dos registros");
    
    }
    
    return rst;
    
    }
    

    public boolean abreBanco() {

    try {
         // Este é um dos meios para registrar um driver
         Class.forName(this.DRIVER);
    
         // Registrado o driver, vamos estabelecer uma conexão
         conn = DriverManager.getConnection(this.URL, this.USERNAME, this.PASSWORD);
    
         // Após estabelecermos a conexão com o banco de dados
         // Utilizamos o método createStatement de con para criar o Statement
         Statement stm = conn.createStatement();
    
         // Vamos executar o seguinte comando SQL:
         SQL = " Select * from " + this.BANCODADOS;
    
    
         // Definido o Statement, executamos a query no banco de dados
         ResultSet rs = stm.executeQuery(SQL);
    
         // O método next () informa se houve resultados e posiciona o cursor
         // do banco
         // na próxima linha disponível para recuperação
         // Como esperamos várias linhas utilizamos um laço para recuperar os
         // dados
         while (rs.next()) {
    
             // Os métodos getXXX recuperam os dados de acordo com o tipo SQL
             // do dado:
             String tit = rs.getString("titulo");
             String aut = rs.getString("autor");
             int totalFaixas = rs.getInt("total_faixas");
    
             // As variáveis tit, aut e totalFaixas contém os valores
             // retornados
             // pela query. Vamos imprimí-los
    
             System.out.println(48 + " Titulo: " + tit + " Autor: " + aut + " 49: Tot. Faixas: " + totalFaixas);
         }
         return true;
     } catch (SQLException e) {
         // se houve algum erro, uma exceção é gerada para informar o erro
         e.printStackTrace(); // vejamos que erro foi gerado e quem o
    
         return false;
     // gerou
    
     } finally {
         try {
             conn.close();
             return true;
         } catch (SQLException onConClose) {
             System.out.println(" Houve erro no fechamento da conexão ");
             onConClose.printStackTrace();
             return false;
         }
     } // fim do bloco try-catch-finally
    

    }

    public boolean fechaBanco() {
    
    try {
    
    conn.close();
    
    return true;
    
    } catch (SQLException onConClose) {
    
    System.out.println(" Houve erro no fechamento da conexão ");
    
    onConClose.printStackTrace();
    
    return false;
    
    }
    
    }
    
    }
    
Criado 20 de novembro de 2007
Ultima resposta 17 de out. de 2008
Respostas 3
Participantes 2