2010-12-08 117 views
21

我正在嘗試爲獨立Java應用程序設置嵌入式Derby數據庫,但在瀏覽各種文檔後,我似乎無法找到任何簡單的解釋或例子。我在Eclipse中使用了Derby插件,併爲我的項目啓用了Derby特性。在獨立Java應用程序中設置嵌入式Derby數據庫

我發現了一個在standalone address book中使用嵌入式Derby數據庫的示例,以及在Eclipse中使用Derby的概述(似乎沒有涵蓋嵌入式部署),但我仍覺得我錯過了某些東西基本的。

這是我第一次嘗試使用與Java數據庫,我有點糊塗了,所以這裏是我的基本問題:

  • 什麼是基本的哲學(或模型)如何Java的交互與Derby數據庫(在嵌入式部署中)?他們的重要設計模式是否被遵循?
  • 是否需要在類中創建某種類型的數據庫構造函數(包括表結構等),還是全部使用其他工具完成?
  • 一個數據庫被創建並保存,我該如何「啓動」它?數據庫保存在哪裏?

代碼片段會非常有幫助!

+0

下面是一個很好的開始:http://db.apache.org/derby/docs/10.6/getstart/特別是,請按照本教程中的步驟操作;您可以找到相當多的示例代碼來幫助您查看步驟:http://db.apache.org/derby/docs/10.6/getstart/cgstutorialintro.html – 2010-12-09 05:42:25

+0

這是最好的。簡潔和完整: http://www.codejava.net/java-se/jdbc/connect-to-apache-derby-java-db-via-jdbc – Bipul 2014-01-19 15:26:25

回答

1

如果您可以切換到NetBeans IDE,那麼這裏有兩個有用的教程,我可以在ide中工作(我在安裝程序中遇到了一些小問題)。它使用JPA,這是一個簡化大量數據庫交互的抽象。

https://blogs.oracle.com/geertjan/entry/embedded_database_for_netbeans_platform

http://platform.netbeans.org/tutorials/nbm-crud.html

解決一些您的詢問:

  1. 如果您在使用Java和關係DBS我會強烈建議 JPA。否則,您正在使用JDBC與您的數據庫進行交互並使用SQL進行交互。
  2. 傳統上使用一個實用程序或運行一個腳本來 創建表架構然而,因爲你是在具有數據庫和架構去爲嵌入你 可能有興趣(因爲我)創建 自動態,所以你不要」你不得不在每次你安裝你的應用程序時運行這個腳本。這可以通過教程涵蓋的德比嵌入式JPA 配置來實現。
  3. 如果您正在運行 嵌入式德比數據庫,則沒有單獨的線程或套接字,您將啓動 。你的應用程序將使用jpa或derby API,它將使用 文件鎖定來訪問德比文件。在我的定義中,嵌入式 數據庫沒有單獨的線程或進程在偵聽處理多個請求的套接字 上進行偵聽。

希望這會有所幫助,祝你好運!

0

這些博客n url非常棒,但我會建議OP切換到NetBeans,即使我使用了d ClientDriver版本的Java Derby驅動程序,並且我創建了一個類或方法來在啓動時自動啓動數據庫我在運行時沒有遇到任何SQLException,它一直在工作。雖然我使用NetworkServerControl類在運行時啓動我的數據庫會像DIZ

NetworkServerControl server=new NetworkServerControl(InetAddress.getLocalHost(),1527); 
server.start (null); 
//Class.forName n DriverManager.getConnection() declarations goes here. 
+0

你能否努力使用正確的英語。 ty – 2013-11-23 14:28:07

2

我建議你使用一個名爲ConnectionDerby類,其中把所有的邏輯和參數選擇,插入,更新,刪除,並作爲一個嵌入式數據庫我comprobate如果數據庫已經存在,如果不存在我創建然後,我希望這段代碼可以幫助你,抱歉或我的英語,我是新手在java中使用這個數據庫,但我希望這可以幫助你理解...

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import javax.swing.JOptionPane; 

public class ConnectionDerby { 

    private Connection conn = null; 
    private Statement sttm = null; 

    public Connection CrearBD(String query) { 
    try { 
     //Obtenemos el Driver de Derby 
     Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 
     conn = DriverManager.getConnection("jdbc:derby:.\\BD\\nombrebasededatos.db;create=true"); 
     if (conn != null) { 
      //JOptionPane.showMessageDialog(null, "Base de Datos Lista"); 
      try { 
       PreparedStatement pstm = conn.prepareStatement(query); 
       pstm.execute(); 
       pstm.close(); 
       //JOptionPane.showMessageDialog(null, "Base de Datos Creada Correctamente"); 
       System.out.println("SENTENCIA SQL EFECTUADA CORRECTAMENTE"); 
      } catch (SQLException ex) { 
       //JOptionPane.showMessageDialog(null, ex.getLocalizedMessage()); 
       System.out.println(ex.getMessage()); 
       JOptionPane.showMessageDialog(null, "NO SE PUDO EFECTUAR LA SENTENCIA SQL", "Error", JOptionPane.ERROR_MESSAGE); 
       //JOptionPane.showMessageDialog(null, "NO SE PUDO EFECTUAR LA SENTENCIA SQL"); 
      } 
     } 

    } catch (SQLException e) { 
     System.out.println(e.getMessage()); 
     JOptionPane.showMessageDialog(null, "NO SE PUDO EFECTUAR LA SENTENCIA SQL", "Error", JOptionPane.ERROR_MESSAGE); 
     //JOptionPane.showMessageDialog(null, "TRONO LA APLICACION EN EJECUTAR LAS SENTENCIAS SQL parte 2"); 
    } catch (ClassNotFoundException e) { 
     System.out.println(e.getMessage()); 
     JOptionPane.showMessageDialog(null, "NO SE PUDO EFECTUAR LA SENTENCIA SQL", "Error", JOptionPane.ERROR_MESSAGE); 
     //JOptionPane.showMessageDialog(null, "TRONO LA APLICACION EN EJECUTAR LAS SENTENCIAS SQL parte 3"); 
    } 
    return conn; 
} 

public Connection AccederBD() { 
    try { 
     //Obtenemos el Driver de Derby 
     Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 
     //Obtenemos la Conexión 
     conn = DriverManager.getConnection("jdbc:derby:.\\BD\\nombrebasededatos.db"); 
     if (conn != null) { 
      System.out.println("Base de Datos Ya Leida Correctamente"); 
      //JOptionPane.showMessageDialog(null, "Base de Datos Ya Leida Correctamente"); 
     } 
    } catch (SQLException e) { 
     System.out.println(e.getMessage()); 
     System.out.println("Sistema Creado por Mario José Echeverría"); 
     System.out.println("NO SE ENCONTRO LA BASE DE DATOS"); 
     System.out.println("CREANDO BASE DE DATOS EN DERBY DATABASE"); 
     String createTableProyecto = "Sentence to create first table"; 
     String createTablePrimer = "Sentence to create second table"; 
     String createTableTopCoat = "Sentence to create third table"; 
     String createTableCotizacion = "Sentence to create fourth table"; 
     CrearBD(createTableProyecto); 
     CrearBD(createTablePrimer); 
     CrearBD(createTableTopCoat); 
     CrearBD(createTableCotizacion); 
     //*************PRUEBAS***************** 
    } catch (ClassNotFoundException e) { 
     System.out.println(e.getMessage()); 
     System.out.println("ERROR DE TIPO ClassNotFoundException"); 
     //JOptionPane.showMessageDialog(null, "TRONO LA APLICACION EN ACCEDER A LA BASE DE DATOS parte 2"); 
    } 
    return conn; 
} 

public void UID(String sqlcad) { 
    try { 
     //Obtenemos el Driver de Derby 
     Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 
     conn = DriverManager.getConnection("jdbc:derby:.\\BD\\nombrebasededatos.db"); 
     sttm = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); 
     sttm.executeUpdate(sqlcad); 
     System.out.println("Conexión Exitosa a la Base de Datos"); 
     //JOptionPane.showMessageDialog(null, "Conexión exitosa"); 
     sttm.close(); 
     conn.close(); 
     if (conn != null) { 
      System.out.println("Consulta Realizada Correctamente"); 
      //JOptionPane.showMessageDialog(null, "Base de Datos Ya Leida Correctamente"); 
     } 
    } catch (SQLException e) { 
     System.out.println("Error= " + e.getMessage()); 
    } catch (ClassNotFoundException e) { 
     System.out.println("Error= " + e.getMessage()); 
    } 
} 

public ResultSet getvalores(String sqlcad) { 
    ResultSet rs = null; 
    try { 
     Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 
     conn = DriverManager.getConnection("jdbc:derby:.\\BD\\nombrebasededatos.db"); 
     sttm = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); 
     //String sqlcad = "Select nombre, m2xgal, pregal, precub, descripcion from primer"; 
     rs = sttm.executeQuery(sqlcad); 
     return rs; 
    } catch (Exception e) { 
     System.out.println("Error= " + e.getMessage()); 
     return rs; 
    } 
} 
} 
0

我從來沒有做過德比(儘管曾經做過一次mysql),並從this simple example得到了全部。其實我甚至都沒有讀過這個話題 - 我只是翻到了一個不言自明的例子。

1

要嵌入模式使用Derby在Java中,我們需要做以下步驟:

  • 使用org.apache.derby.jdbc.EmbeddedDriver司機,位於 的derbyclient Maven的依賴
  • 使用嵌入式模式連接字符串: jdbc:derby:dbname
  • 設置Derby系統主頁: System.setProperty("derby.system.home", "/home/janbodnar/.derby");
  • 編程在年底關閉德比: DriverManager.getConnection("jdbc:derby:;shutdown=true");
  • 手柄XJ015錯誤,這是在全成關機觸發

全部工作的例子可以在我的Java JDBC Derby programming tutorial找到。

相關問題