安装

无需安装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. 拆边+BFS队列骚操作——cf1209F

    这个拆边+队列操作实在是太秒了 队列头结点存的是一个存点集的vector,1到这个点集经过的路径权值是一样的,所以向下一层拓展时,先依次走一遍每个点的0边,再走1边...以此类推,能保证最后走出来的路 ...

  2. delphi 多线程3

     多线程程序设计 我们知道,win95或winNT都是“多线程”的操作系统,在DELPHI .中,我们可以充分利用这一特性,编写出“多线程”的应用程序. 对以往在DOS或16位windows下写程序的 ...

  3. LUOGU P2408 不同子串个数(后缀数组)

    传送门 解题思路 后缀数组求本质不同串的裸题.\(ans=\dfrac{n(n+1)}{2} -\sum height[i]\). 代码 #include<iostream> #inclu ...

  4. RN 0.6以后react-navigation 导航报错null is not an object (evaluating '_RNGestureHandlerModule.default.Direction')

    很久没用RN了之前用的时候还是很早的版本,现在有了很大的变化,感觉比之前成熟了很多重新看下.先整下导航 参考地址:https://reactnavigation.org/docs/en/getting ...

  5. 2019 wannafly winter camp day5-8代码库

    目录 day5 5H div2 Nested Tree (树形dp) 5F div2 Kropki (状压dp) 5J div1 Special Judge (计算几何) 5I div1 Sortin ...

  6. 3.2 Redux TodoApp

    上一节讲完了 redux 中的概念,但是仍然没有和 react 联系起来,这一节将利用 redux 在 react 中实现完整的 todolist: 在 react 使用 redux 通过 Provi ...

  7. PAT_A1041#Be Unique

    Source: PAT A1041 Be Unique (20 分) Description: Being unique is so important to people on Mars that ...

  8. Codeforces 1169A Circle Metro

    题目链接:codeforces.com/contest/1169/problem/A 题意:有俩个地铁,一个从 1 → 2 → …→ n → 1→ 2 →…, 一个 从 n → n-1 →…→ 1 → ...

  9. vim的基本快捷操作(一)

    一.光标移动 ^ 到该行第一个非空格字符处. + 到下一行的第一个非空格字符处 - 到上一行的第一个非空格字符处 `. 到上次修改点 <c-o> 到上次所停留位置, <c-i> ...

  10. hdu6537 /// DP 最长不降子序列->最长公共子序列

    题目大意: 给定一个字符串 字符为0~9 求翻转某个区间后使得串中的最长不降子序列最长 因为字符范围为0~9 假设有一个 0 1 2 3 4 5 6 7 8 9 的序列 此时翻转某个区间得到形如 0 ...