2010-12-08 84 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找到。