Java DB嵌入式模式

Java DB是基于Java编程语言和SQL的关系数据库管理系统。 这是Apache软件基金会的开源Derby项目的Oracle版本。 Java SE 7 SDK中包含Java DB。

Java DB有两个部署选项: EmbeddedNetwork Server

这篇文章是关于嵌入式部署或模式的。

1.嵌入式


在嵌入式模式下:

  • 该数据库只能从一个应用程序访问。
  • 应用程序和数据库之间没有网络连接。
  • 应用程序和数据库在同一JVM(Java虚拟机)中运行。

使用JDBC(Java数据库连接)从Java应用程序访问数据库。 通常,数据库由访问数据库的应用程序启动和停止。 并且,不需要数据库管理。

图片

启动Java DB

从应用程序启动Java DB。 首先,加载数据库JDBC驱动程序。 接下来,使用连接URL连接到数据库。

  • 该驱动程序包含在Java DB中: org.apache.derby.jdbc.EmbeddedDriver
  • 连接URL格式为: jdbc:derby:databaseName; URLAttributes;
  • 一个示例连接URL是jdbc:derby:SampleDB; create = true; ,其中数据库名称为SampleDB ,“ create = true”为属性名称/值对。

以下是使用JDBC启动数据库的示例Java方法:

/** The method creates a Connection object. Loads the embedded driver,* starts and connects to the database using the connection URL.*/
public static Connection createDatabaseConnection()throws SQLException, ClassNotFoundException {String driver = "org.apache.derby.jdbc.EmbeddedDriver";Class.forName(driver);String url = "jdbc:derby:sampleDB";Connection c = DriverManager.getConnection(url);return c;
}

通过上述方法创建的Connection对象用于使用SQL访问数据库对象和数据。 sampleDB是数据库的名称。

注意: derby.jar库必须位于使用Java DB Embedded的应用程序的类路径中。 该库包含驱动程序。 它包含在Java DB中。

使用“ ij”以交互方式访问Java DB数据库

ij是Java DB附带的命令行工具。 ij是一个JDBC工具,用于在Java DB数据库上运行交互式查询。 这位于Java DB安装的\ bin目录中。

启动ij,创建数据库并运行SQL命令以创建和访问数据:

os prompt> ij
ij> CONNECT 'jdbc:derby:testDB;create=true';
ij> Enter SQL commands here…

这将在当前目录中创建一个名为testDB的数据库并连接到该数据库。 Java DB数据库以与数据库名称相同的名称存储在目录内的文件中。

2.用法示例

一个示例用法是使用嵌入式数据库的基于Java Swing的桌面应用程序。 首次启动应用程序时,将创建数据库及其对象。 随后,应用程序创建或访问数据库中的数据。 该应用程序还具有在线备份数据库功能(即在数据库打开时进行备份副本)和从备份数据库副本功能进行还原 。 数据库随应用程序关闭。

3.从多个客户端连接到嵌入式Java DB

可以从多个客户端访问嵌入式模式下的Java DB。 一个示例是部署在Web服务器上并连接到数据库的Java Servlet应用程序。 Java DB数据库在Web服务器上配置为DataSource类型的资源。 Servlet应用程序启动数据库并创建Connection对象。 Connection对象是使用DataSource对象而不是DriverManager创建的。 多个Web客户端通过应用程序访问数据库数据。

image2

一个例子

  • 在Web服务器上配置数据源资源
  • 从Servlet访问数据库(使用配置的数据源)

该配置适用于Apache Tomcat 6 Web服务器。 以下代码示例使用Java Servlet(Java EE),JNDI(Java命名和目录接口)和JDBC API。

3.1.1。 在Web服务器上配置数据源资源

这称为上下文配置。 这将JDBC数据源的JNDI名称定义为Web应用程序中使用的Java DB数据库的资源(用于JNDI查找)。 另外,指定资源参数。

以下条目已添加到文件“ /META-INF/context.xml”中。 META-INF目录将位于Web应用程序部署WAR文件的根目录中。

<Context><Resourcename="jdbc/testDB"auth="Container"type="javax.sql.DataSource"username=""password=""driverClassName="org.apache.derby.jdbc.EmbeddedDriver"url="jdbc:derby:testDB"/>
</Context>
  • name:是数据源资源的JNDI名称。
  • url:指定格式为jdbc:derby:databaseName; URLAttributes;的JDBC数据库连接URL 并且, testDB是要连接的Java DB数据库的名称。

请注意,应用程序从Derby系统目录访问嵌入式数据库。 默认情况下,当前目录(JVM系统属性user.dir )是系统目录。

对于Java DB,可以通过设置JVM系统属性derby.system.home来指定Derby系统目录(可选)。 在操作系统命令提示符下使用“ java”命令(例如, java -Dderby.system.home = D:\ mydatabases MyApplication )或在Java程序中(使用java.lang.System类的setProperty() )进行设置。 。

注意:嵌入式数据库驱动程序(derby.jar)将放置在“ CATALINA_HOME \ lib”目录中。 CATALINA_HOME是Tomcat安装目录。

3.1.2。 从Servlet访问数据库

以下Java代码显示了使用已配置的DataSource资源访问Java DB数据库的servlet类。 该代码假定已经创建了数据库(使用另一个应用程序或使用ij进行交互)。

public class TestServlet extends HttpServlet {
private Connection conn;
/** Method executes when the servlet is created.* Accesses the DataSource object and creates the Connection object.*/
@Override
public void init()throws ServletException {InitialContext cxt = null;DataSource ds = null;try {cxt = new InitialContext();ds = (DataSource)cxt.lookup("java:/comp/env/jdbc/testDB");}catch (NamingException ex) {throw new ServletException("naming context error", ex);}try {conn = ds.getConnection();}catch (SQLException ex) {throw new ServletException("connection error", ex);}
} // init()
/** Method to handle a Http Get request.* The Connection object created in init() is used to access the* database data using JDBC API. */@Overridepublic void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {...Statement stmnt = conn.createStatement();ResultSet rs = stmnt.executeQuery("SELECT * FROM test_table");...}
} // TestServlet

4.网络服务器(又名服务器)

在这种模式下,可通过网络(客户端-服务器配置)从多个客户端访问Java DB。 数据库和应用程序在不同的JVM中运行。 使用JDBC从Java应用程序访问服务器上的数据库。

以下是服务器使用情况的示例。

启动服务器

使用提供的批处理程序(位于Java DB安装的\ bin目录中)从Windows命令提示符下启动和停止服务器: startNetworkServer.batstopNetworkServer.bat

从客户端应用程序访问Java DB

加载驱动程序并使用连接URL连接到数据库。

  • 驱动程序是: org.apache.derby.jdbc.ClientDriver
  • 连接URL格式为: jdbc:derby:// server:port / databaseName; URLAttributes;
  • server是主机名(或ip地址), port是服务器正在侦听客户端请求的端口号(默认为1527)。

以下是使用JDBC启动数据库的示例Java方法:

/** The method creates a Connection object. Loads the client driver,* starts and connects to the database using the connection URL.*/
public static Connection createDatabaseConnection()throws SQLException, ClassNotFoundException {String driver = "org.apache.derby.jdbc.ClientDriver";Class.forName(driver);String url = "jdbc:derby://localhost:1527/sampleDB";Connection c = DriverManager.getConnection(url);return c;
}

通过上述方法创建的Connection对象用于使用SQL访问数据库对象和数据。 sampleDB是数据库的名称。

注意: derbyclient.jar库必须位于客户端应用程序的类路径中,才能启动和访问Java DB数据库。 该库包含驱动程序。 它包含在Java DB中。

5.参考

  • Apache Derby>文档(10.8手册):http://db.apache.org/derby/manuals/index.html
  • Oracle的Java DB:http://www.oracle.com/technetwork/java/javadb/overview/index.html
  • 作者的Java DB备份和还原博客文章:http://www.javaquizplayer.com/blog.html
  • 作者开发和部署(并使用Java DB Embedded)基于Java Swing的桌面应用程序:http://www.scribonotes.com

翻译自: https://www.javacodegeeks.com/2013/07/java-db-embedded-mode.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368103.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 多线程处理redis,redis的多线程

目录先说明下redis也是多线程的.但是redis的主线程处理业务.而其他三个线程跟主要功能是关系不到的redis的三个线程主要是做什么初始化入口void initServer(void) {...bioInit();...}初始化后redis其他后台线程.void bioInit(void) {pthread_attr_t attr;pthread_t thread;size…

linux内核删不掉,linux 删除内核文件,未能启动,修复方法 CDROM与网络法

当缺少 /boot 内核文件vmlinuz-2….initramfs-2…此时只能借助 光盘 CDROM 来引导生成进入 RESCUE 模式1 chroot /mnt/sysimagemount /dev/cdrom /mnt/cdromcd /mnt/cdromcd isolinux cp vmlinuz /boot/按照…

阿卡vs风暴

我最近在Twitter的Storm上工作了一段时间&#xff0c;这让我想知道&#xff0c;它与另一个高性能的并发数据处理框架Akka相比如何 。 什么是Akka和Storm&#xff1f; 让我们从两个系统的简短描述开始。 Storm是一个分布式实时计算系统。 在Storm集群上&#xff0c;您执行拓扑 …

清除浮动方法解析

清除浮动方法解析 清除浮动带来的额外影响 如果对于浮动不熟悉的同学&#xff0c;可以看看介绍float的文章。传送门&#xff1a;CSS float 我们知道&#xff0c;在一个父元素内如果遇到某个浮动元素&#xff0c;此时父元素的高度会发生塌陷。针对父元素高度塌陷的问题&#xff…

进程间的通信----管道

前提&#xff1a;本文是基于Linux系统下的学习 用户态的进程是如何组织的呢&#xff1f;所有的用户态进构成了一棵树。进程树。 进程树的树根是init.也就是1号进程。是用户态进程的祖宗进程。如何查看进程树&#xff1f;pstree 进程之间的关系 父子进程和兄弟进程查看进程的信息…

web项目启动时,自动执行代码的几种方式

在项目开发过程中&#xff0c;往往需要一些功能随着项目启动而优先启动&#xff0c;下面我总结几种方式&#xff08;非spring boot&#xff09; spring boot的参考 spring boot 学习之路9 (项目启动后就执行特定方法) 方式一&#xff1a; ServletContextListener监听器&#…

设计模式:状态

本文将介绍状态设计模式 。 它是行为设计模式之一 。 您无需了解许多理论即可了解模式的主要概念。 该文章将分为几个部分&#xff0c;在其中我将提供有关需要应用该模式的情况&#xff0c;它所具有的利弊以及用法示例的信息。 有时&#xff0c;当对象的内部状态更改时&#…

Linux内核锁实现原理,linux 大内核锁原理

大内核锁(BKL)的设计是在kernel hacker们对多处理器的同步还没有十足把握时&#xff0c;引入的大粒度锁。他的设计思想是&#xff0c;一旦某个内核路径获取了这把锁&#xff0c;那么其他所有的内核路径都不能再获取到这把锁。自旋锁加锁的对象一般是一个全局变量&#xff0c;大…

Sass学习日志

一、什么是SASS SASS是一中CSS的开发工具&#xff0c;提供了许多便利的写法&#xff0c;大大节约了设计者们的时间&#xff0c;使得CSS的开发&#xff0c;变得简单和可维护。本文总结了SASS的主要方法。我们的目标是&#xff0c;有了这篇文章&#xff0c;日常的一般使用就不需…

ptyhon中文本挖掘精简版

import xlrd import jieba import sys import importlib import os #python内置的包&#xff0c;用于进行文件目录操作&#xff0c;我们将会用到os.listdir函数 import pickle #导入cPickle包并且取一个别名pickle #持久化类 import random import numpy as np …

[UWP]了解模板化控件(9):UI指南

[UWP]了解模板化控件(9)&#xff1a;UI指南 原文:[UWP]了解模板化控件(9)&#xff1a;UI指南1. 使用TemplateSettings统一外观 TemplateSettings提供一组只读属性&#xff0c;用于在新建ControlTemplate时使用这些约定的属性。 譬如&#xff0c;修改HeaderedContentControl的Co…

Java的反射API

如果您曾经问​​过自己以下问题&#xff1a; –“如何在字符串中仅包含其名称的方法调用&#xff1f;” –“如何动态列出类中的所有属性&#xff1f;” –“如何编写一种将任何给定对象的状态重置为默认值的方法&#xff1f;” 然后您可能已经听说过Java的Reflection API…

linux服务器基本常识,服务器搭建-Linux基础知识

服务器搭建还是需要一些Linux知识的&#xff0c;这节就聊点基础的。文件权限操作查看权限Linux中每个文件对每个用户来说都有对应的权限&#xff0c;在任一路径中输入ll就可以查看这些信息&#xff1a;rootip-*** /usr/local # lltotal 32Kdrwxr-xr-x 2 root root 4.0K Jan 14 …

mysql基本命令入门

背景 作为一个前端&#xff0c;重新学习后台相关知识&#xff0c;记录下自己遇到及用到的命令及爬坑经验。 基本命令 1.创建数据库 create database 数据库名称 eg: create database test //创建一个名为test的数据库 2.查看所有数据库 show databases 3.选择某一个数据库 use …

不完善迷你计算器

html代码&#xff1a; <!DOCTYPE html PUBspanC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml"><head><meta http-e…

LINQ和Java

LINQ已经非常成功&#xff0c;但在.NET生态系统中也引起了争议。 许多人正在Java世界中寻找可比的解决方案。 为了更好地理解什么是可比的解决方案&#xff0c;让我们看一下LINQ解决的主要问题&#xff1a; 查询语言通常是具有许多关键字的声明性编程语言。 它们提供的控制流元…

怎样 测试 某个 端口 是否打开

我们一般最常见的工具是telnet&#xff0c;但是telnet使用的是tcp协议&#xff0c;换句话说telnet只能检测tcp的这个端口打开了没。 方法很简单&#xff0c;假设我们要看192.192.193.211这个IP的tcp 22端口是否打开&#xff0c;则运行telnet 192.192.193.211 22 来查看 如果cen…

linux用户空间注册按键事件,linux下获取按键响应事件

1、问题通过一个死循环将读取键盘对应的设备文件将触发键盘事件在屏幕上打印出来&#xff0c;按esc退出程序代码是在unbuntu10.04编译执行通过的2、input_event描述在Linux内核中&#xff0c;input设备用input_dev结构体描述&#xff0c;使用input子系统实现输入设备驱动的时候…

CSS实现单行与多行文字省略(truncation)

在上一篇文章小div布局之卡片堆叠&#xff08;card-stacking&#xff09;中有多行文字溢出省略的效果&#xff0c;这篇文章就对这种效果&#xff08;包括单行文字溢出省略&#xff09;的实现做个简单的记录&#xff0c;以防自己忘记。具体来说&#xff0c;就是要实现这种文字排…

位运算的使用例子

class Data { public:enum Permission{allowSelect 1 << 0,allowUpdate 1 << 1,allowInsert 1 << 2,allowDelete 1 << 3}; public:Data():flag(0){};~Data(){};/*添加某权限*/void enable(int permission){flag | permission;}/*删除某权限*/void…