安装

无需安装jdk自带 (1.8好像没有)

jdk已经帮我们安装在了 ** 本机jdk的安装目录/db **下

环境变量

vi /etc/profile
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home
export DERBY_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/db
PATH=$JAVA_HOME/bin:$DERBY_HOME:$PATH:.
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$DERBY_HOME/lib/derby.jar:$DERBY_HOME/lib/derbyclient.jar:$DERBY_HOME/lib/derbytools.jar:.
export JAVA_HOME
export PATH
export CLASSPATH
source /etc/profile

验证是否安装成功

java org.apache.derby.tools.sysinfo

输出如下说明成功

java.specification.version: 1.7
java.runtime.version: 1.7.0_60-b19
--------- Derby 信息 --------
JRE - JDBC: Java SE 7 - JDBC 4.0
[/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/db/lib/derby.jar] 10.8.3.2 - (1557835)
[/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/db/lib/derbytools.jar] 10.8.3.2 - (1557835)
[/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/db/lib/derbyclient.jar] 10.8.3.2 - (1557835)
------------------------------------------------------
----------------- 语言环境信息 -----------------
当前语言环境:  [中文/中国 [zh_CN]]
找到支持的语言环境:[cs]
	 版本:10.8.3.2 - (1557835)
找到支持的语言环境:[de_DE]
	 版本:10.8.3.2 - (1557835)
找到支持的语言环境:[es]
	 版本:10.8.3.2 - (1557835)
找到支持的语言环境:[fr]
	 版本:10.8.3.2 - (1557835)
找到支持的语言环境:[hu]
	 版本:10.8.3.2 - (1557835)
找到支持的语言环境:[it]
	 版本:10.8.3.2 - (1557835)
找到支持的语言环境:[ja_JP]
	 版本:10.8.3.2 - (1557835)
找到支持的语言环境:[ko_KR]
	 版本:10.8.3.2 - (1557835)
找到支持的语言环境:[pl]
	 版本:10.8.3.2 - (1557835)
找到支持的语言环境:[pt_BR]
	 版本:10.8.3.2 - (1557835)
找到支持的语言环境:[ru]
	 版本:10.8.3.2 - (1557835)
找到支持的语言环境:[zh_CN]
	 版本:10.8.3.2 - (1557835)
找到支持的语言环境:[zh_TW]
	 版本:10.8.3.2 - (1557835)
-------------

启动

本地启动

任意目录:

java -jar $DERBY_HOME/lib/derbyrun.jar server start
➜  ~ java -jar $DERBY_HOME/lib/derbyrun.jar server start
Sat Feb 02 16:56:12 CST 2019 : 已使用基本服务器安全策略安装了安全管理程序。
Sat Feb 02 16:56:13 CST 2019 : Apache Derby 网络服务器 - 10.8.3.2 - (1557835) 已启动并准备接受端口 1527 上的连接

如上即成功

允许远程连接的启动方式:

摘录:

derby 的用户名和密码是公开的, 允许远程连接是不安全的因素。

你用startnetworkserver 命令的时候,开启的网络服务,虽然允许多客户端多进程,但仅限本机使用

如希望使用 ip地址 远程连接,必须强制指定提供服务的IP 地址和 端口,否则仅限localhost。所以,应该做如下修改:

1. 进入derby数据库安装包下: derby/目录下的derby.drda.host=127.0.0.1改成derby.drda.host=0.0.0.0

2.进入命令行,cd到derby安装包的bin目录,执行:

NetworkServerControl start -h 10.31.23.45 -p 1527

(形式 networkservercontrol start -h %ip地址% -p %port%)

摘自:https://blog.csdn.net/qq_25337221/article/details/83240572

因为我直接用的jdk本身的derby,并没有找到方法一中的文件,所以我的真实操作如下:

在db/bin下

startNetworkServer(网络模式开启)(我没用这个)     在任意路径下,之后创建的数据库会在这个任意的路径下出现。

用这个就对了

如果之前用本地的方式开启的服务,先关了然后:

NetworkServerControl start -h 192.168.1.130(本机的真实ip,不是localhost也不是127.0.0.1) -p 1527 (能够指定ip,修改localhost)

在启动过程中可能遇到的错误(远程连接的时候会出现):

1

错误 08001:java.net.ConnectException:连接到端口 1527 上的服务器 10.0.4.120 时出错,消息为 Connection refused。

解决:查看对应的db服务是否开启

2

错误 XJ041:DERBY SQL error: SQLCODE: -40001, SQLSTATE: XJ041, SQLERRMC: 无法创建数据库“db”,请参阅下一个异常错误,以了解详细信息。::SQLSTATE: XBM0H

这是本人遇到的错误,是因为mac中jdk的安装路径是在/下的可能没有创建的权限 通过sudo chmod -R 777 xxx 改变derby所在相关地址权限即可(比如我改的就是jdk1.7下的db目录的权限)。

连接测试,创建数据库

方法一(推荐)

任意目录

java org.apache.derby.tools.ij
➜  db java org.apache.derby.tools.ij
ij 版本 10.8

说明成功

connect 'jdbc:derby://localhost:1527/new;create=true;user=root;password=root';

注意: (此操作一定要以分号结尾)

jdbc:derby://localhost:1527/new这里的new是数据库,

create=true;没有就创建的意思

user=root;password=root用户名密码

完整操作

➜  db java org.apache.derby.tools.ij
ij 版本 10.8
ij> connect 'jdbc:derby://localhost:1527/new;create=true;user=root;password=root';
ij>

最下面出现ij>说明连接并创建数据库成功

方法二

在lib目录下建立ij.properties 文件

ij.driver=org.apache.derby.jdbc.ClientDriver

ij.protocol=jdbc:derby://localhost:1527/

#当COREJAVA数据库不存在,创建一个

ij.database=COREJAVA;create=true

在另一个命令shell中,通过执行下面的命令来运行Derby 的交互式脚本执行工具(称为ij): java -jar derby/lib/derbyrun.jar ij -p ij.properties

java demo

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.cloudwise</groupId>
    <artifactId>derby</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>Maven Quick Start Archetype</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.derby/derbyclient -->
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derbyclient</artifactId>
            <version>10.7.1.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.derby/derby -->
        <!-- <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <version>10.8.3.0</version>
            <scope>test</scope>
        </dependency> -->

    </dependencies>
    <properties>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <manifestEntries>
                                        <Main-Class>com.cloudwise.leesin_derby.Start</Main-Class>
                                        <Build-Number>123</Build-Number>
                                    </manifestEntries>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <classesDirectory>${project.build.directory}/classes</classesDirectory>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.cloudwise.leesin_derby.Start</mainClass>
                            <useUniqueVersions>false</useUniqueVersions>
                        </manifest>
                        <manifestEntries>
                            <Class-Path>${basedir}/libs/derbyclient.jar</Class-Path>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Start.class

import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashSet;
import java.util.Properties;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Hello world!
 *
 */
public class Start extends HttpServlet{
	public  void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{
        try{
            runTest();
            response.getWriter().print("success!success!success!success!success!success!success!success!");
        }catch(SQLException ex){
            for(Throwable t:ex)
                t.printStackTrace();
        }

    }
    /**
    *Runs a test by creating a table,adding a value,showing the table contents,and removing the table.
    */
    public static void runTest() throws SQLException,IOException{
        try(Connection conn = getConnection())
        {
            Statement stat = conn.createStatement();
            DatabaseMetaData meta = conn.getMetaData();
			ResultSet res = meta.getTables(null, null, null, new String[]{"TABLE"});
			HashSet<String> set=new HashSet<String>();
			while (res.next()) {
				set.add(res.getString("TABLE_NAME"));
			}
			if(set.contains("Greetings1".toUpperCase())){
				stat.executeUpdate("drop TABLE Greetings1");
			}
			if(set.contains("Greetings2".toUpperCase())){
				stat.executeUpdate("drop TABLE Greetings2");
			}
			if(set.contains("Greetings3".toUpperCase())){
				stat.executeUpdate("drop TABLE Greetings3");
			}

            //*******************************derby中的droop table if exists xxx 是不允许的***********************
            stat.executeUpdate("CREATE TABLE Greetings1 (Message CHAR(40))");
            stat.executeUpdate("CREATE TABLE Greetings2 (Message CHAR(40))");
            stat.executeUpdate("CREATE TABLE Greetings3 (Message CHAR(40))");
            stat.executeUpdate("INSERT INTO Greetings1 VALUES('这个语句是属于statmeny的')");
            PreparedStatement prepareStatement = conn.prepareStatement("INSERT INTO Greetings2 VALUES('这个语句是属于preparestatment的')");
            prepareStatement.execute();
            CallableStatement calls = conn.prepareCall("INSERT INTO Greetings3 VALUES('这个语句是属于callablestatement的')");
            calls.execute();
            try(ResultSet result = stat.executeQuery("SELECT * FROM Greetings1")){
                //将光标移动到下一行,初始在第一行之前
                while(result.next())
                    System.out.println(result.getString("Message"));
            }
            //*******************************预编译语句上不允许使用方法“executeQuery(String)”。*********************************
//            try(ResultSet result = prepareStatement.executeQuery("SELECT * FROM Greetings2")){
//                //将光标移动到下一行,初始在第一行之前
//                while(result.next())
//                    System.out.println(result.getString("Message"));
//            }
//            try(ResultSet result = calls.executeQuery("SELECT * FROM Greetings3")){
//                //将光标移动到下一行,初始在第一行之前
//                while(result.next())
//                    System.out.println(result.getString("Message"));
//            }
            try(ResultSet result = stat.executeQuery("SELECT * FROM Greetings2")){
                //将光标移动到下一行,初始在第一行之前
                while(result.next())
                    System.out.println(result.getString("Message"));
            }try(ResultSet result = stat.executeQuery("SELECT * FROM Greetings3")){
                //将光标移动到下一行,初始在第一行之前
                while(result.next())
                    System.out.println(result.getString("Message"));
            }
            stat.executeUpdate("DROP TABLE Greetings1");
            stat.executeUpdate("DROP TABLE Greetings2");
            stat.executeUpdate("DROP TABLE Greetings3");

        }
    }
    /**
    *Gets a connection from the properties specified in the file database.properties.
    *@return the database connection
    */
    public static Connection getConnection() throws SQLException,IOException{
        Properties props = new Properties();
//        try(InputStream in = Files.newInputStream(Paths.get("db.txt"))){
//            props.load(in);
//        }
        try(InputStream r = Start.class.getClassLoader().getResourceAsStream("db.txt")){
            props.load(r);
        }
        String drivers = props.getProperty("jdbc.drivers");

        //为了适应那些不能自动注册的数据库驱动程序
        if(drivers != null)
            //这种方式可以提供多个驱动器,使用冒号分割
            System.setProperty("jdbc.drivers",drivers);
        try{
//            Class.forName("org.apache.derby.jdbc.ClientDriver");
        	Class.forName(drivers);
        }catch(Exception ex){
            ex.printStackTrace();
        }

        String url = props.getProperty("jdbc.url");
        System.out.println(url);
        String username = props.getProperty("jdbc.username");
        //System.out.println(username);
        String password = props.getProperty("jdbc.password");
        //System.out.println(password);
       // return DriverManager.getConnection("jdbc:derby://127.0.0.1:1527/newdb","root","root");
        return DriverManager.getConnection(url,username,password);
    }

}

web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>start</servlet-name>
        <servlet-class>Start</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>start</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

db.ext


jdbc.drivers=org.apache.derby.jdbc.ClientDriver
#因为derby驱动程序将自动注册驱动类
jdbc.url=jdbc:derby://localhost:1527/new
jdbc.username=root
#可以不使用用户名和密码,默认是APP用户,因为如果使用了如此的设置在第二次创建时(第一次中途失败)会出现 #org.apache.derby.client.am.SqlException: Schema“DBUSER4”中已经存在Table/View“GREETINGS”的异常,便于方便,所以在此注释掉了。
jdbc.password=root

运行结果

[2019-02-02 05:07:02,244] Artifact derby_demo:war: Artifact is deployed successfully
[2019-02-02 05:07:02,244] Artifact derby_demo:war: Deploy took 557 milliseconds
jdbc:derby://localhost:1527/new
这个语句是属于statmeny的
这个语句是属于preparestatment的
这个语句是属于callablestatement的

参考文章:https://blog.csdn.net/weixin_42812613/article/details/82937773

jdk自带的数据库derby的基本使用以及注意事项(mac为例),附java demo的更多相关文章

  1. jdk 自带的数据库Derby使用

    ij是derby自带的一个功能强大的数据库管理工具,可以进行很多数据库管理的操作,包括创建数据库, 启动/关闭数据库,执行SQL脚本等.完成准备工作后,就可以启动并使用ij工具了. 在cmd中输入如下 ...

  2. 干货 | 10分钟带你彻底了解column generation(列生成)算法的原理附java代码

    OUTLINE 前言 预备知识预警 什么是column generation 相关概念科普 Cutting Stock Problem CG求解Cutting Stock Problem 列生成代码 ...

  3. jdk自带的MD5进行数据的加密与解密

    package com.tools.util; import java.io.IOException; import java.io.UnsupportedEncodingException; imp ...

  4. CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-5安装JDK及安装mysql数据库

    1.安装JDK 可以不用卸载自带的openjdk,配好环境变量即可. 下载文件:jdk-8u151-linux-x64.tar.gz 附:JDK各版本下载地址:https://www.oracle.c ...

  5. JDK自带工具keytool生成ssl证书

    前言: 因为公司项目客户要求使用HTTPS的方式来保证数据的安全,所以木有办法研究了下怎么生成ssl证书来使用https以保证数据安全. 百度了不少资料,看到JAVA的JDK自带生成SSL证书的工具: ...

  6. 一、hive安装(内置数据库derby)

    hive是一个数据仓库工具,建立在hadoop之上,它的存在是为了让大数据的查询和分析更加的方便.hive提供简单的sql查询功能,并最终转换为mapreduce任务执行. 一.环境 JDK1.8+官 ...

  7. 不推荐别的了,IDEA 自带的数据库工具就很牛逼!

    MySQL 等数据库客户端软件市面上非常多了,别的栈长就不介绍了, 其实 IntelliJ IDEA 自带的数据库工具就很牛逼,不信你继续往下看. 本文以 IntelliJ IDEA/ Mac 版本作 ...

  8. JDK 自带的服务发现框架 ServiceLoader 好用吗?

    请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 Github · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...

  9. 使用JDK自带的visualvm进行性能监测和调优

    使用JDK自带的visualvm进行性能监测和调优   1.关于VisualVm工具  VisualVM 提供在 Java 虚拟机 (Java Virutal Machine, JVM) 上运行的 J ...

随机推荐

  1. 行业顶级NoSQL成员坐阵,NoSQL数据库专场重点解析!

    NoSQL数据库作为数据库市场最重要的组成之一,它的一举一动都影响着成千上万的企业.本专场邀请了行业顶级的NoSQL核心成员与大家共同展望NoSQL数据库的未来,阿里巴巴.MongoDB.Rediss ...

  2. move_base 分层代价地图的作用(翻译)

    A. 标准层 ​ Static Map Layer:为了做全局规划,机器人需要一个超越其传感器的地图,以了解墙壁和其他静态障碍物的位置. 静态地图可以先用SLAM算法生成,也可以从架构图中创建. 当层 ...

  3. DOM学习总结(六)DOM导航

    什么是 HTML DOM 导航? DOM是一个以节点关系组成的结构,所以我们可以使用节点之间的关联找到整个HTML页面中的元素 1.HTML DOM 节点列表: getElementsByTagNam ...

  4. (转)OpenFire源码学习之九:OF的缓存机制

    转:http://blog.csdn.net/huwenfeng_2011/article/details/43415023 关于缓存,openfire存储到了本地JVM中.本人认为这样并不是很好.以 ...

  5. 设置单网卡双ip

    环境如下: [root@localhost ~]# cat /etc/redhat-releaseCentOS Linux release 7.7.1908 (Core) 安装时选择的最小化安装 -- ...

  6. C#获取系统服务+进程+启动时间

    原文:C#获取系统服务+进程+启动时间 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/weixin_38208401/article/details ...

  7. 初探Javascript魅力(1)

    转自:CSDN--http://blog.csdn.net/cherry_vicent/article/details/42120149 1.javascript是什么   根据用户的一些操作,然后来 ...

  8. OAuth2.0实例说明

    OAuth2.0 详细实列+Word文档清晰说明 实例下载地址:https://files.cnblogs.com/files/liyanbofly/OAuth2.0%E5%AE%9E%E4%BE%8 ...

  9. python3添加requests库

    1.资源下载 https://codeload.github.com/psf/requests/zip/master https://www.python.org/ https://files.pyt ...

  10. 笔记38 Spring Web Flow——订单流程(定义基本流程)

    做一个在线的披萨订购应用 实际上,订购披萨的过程可以很好地定义在一个流程中.我们首先从 构建一个高层次的流程开始,它定义了订购披萨的整体过程.接下 来,我们会将这个流程拆分成子流程,这些子流程在较低的 ...