在独立Java应用程序中设置嵌入式Derby数据库

我正在尝试为独立的Java应用程序设置嵌入式Derby数据库,但在完成各种文档之后,我似乎无法找到任何简单的解释或示例。 我正在使用带有Derby插件的Eclipse,并为我的项目启用了Derby特性。

我找到了一个在独立地址簿中使用嵌入式Derby数据库的示例,以及在Eclipse中使用Derby的概述(这似乎不包括嵌入式部署),但我仍然觉得我缺少一些基本的东西。

这是我第一次尝试使用Java数据库,我有点困惑,所以这是我的基本问题:

  • Java如何与Derby数据库交互(在嵌入式部署中)的基本理念(或模型)是什么? 他们的重要设计模式是否被遵循?
  • 我是否需要在类中创建某种类型的数据库构造函数(包括表结构等),或者是否所有这些都是通过其他工具完成的?
  • 一个数据库被创建并保存,我该如何“启动”它? 实际数据库保存在哪里?

代码片段将非常有用!

要在嵌入模式下使用Java中的Derby,我们需要执行以下步骤:

  • 使用位于derbyclient Maven依赖项中的org.apache.derby.jdbc.EmbeddedDriver驱动程序
  • 使用连接字符串进行嵌入模式: jdbc:derby:dbname
  • 设置Derby系统home: System.setProperty("derby.system.home", "/home/janbodnar/.derby");
  • 最后以编程方式关闭Derby: DriverManager.getConnection("jdbc:derby:;shutdown=true");
  • 处理XJ015错误,该错误在成功关闭时触发

可以在我的Java JDBC Derby编程教程中找到完整的工作示例。

我建议您使用一个名为ConnectionDerby的类,其中将所有逻辑和参数放入选择,插入,更新,删除,并且作为嵌入式数据库,如果数据库已经存在,我会创建,如果不存在我创建的话,我希望这样代码帮助你,对不起或我的英语和我是新手在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; } } } 

如果您可以切换到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. 传统上,您使用实用程序或运行脚本来创建表模式,但是因为您要使用嵌入式,您可能会感兴趣(因为我)使用db和schema自动创建它,因此您不必运行此脚本每次安装应用程序时。 这对于本教程涵盖的德比嵌入式JPA配置是可行的。
  3. 如果您正在运行嵌入式derby数据库,则不会启动单独的线程或套接字。 你的应用程序将使用jpa或derby api,它将使用文件锁定来访问derby文件。 在我的定义中,嵌入式数据库没有单独的线程或进程侦听处理多个请求的套接字。

希望这有帮助,祝你好运!

那些博客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. 

我从来没有做过德比(尽管曾经做过mysql)并且从这个简单的例子开始 。 实际上我甚至没有读过这个话题 – 我只是滚动到中间,其中有一个不言自明的例子。