安装

无需安装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. python之—flask虚拟环境

    一.安装: 输入以下命令可以检查系统是否安装了virtualenv : $ virtualenv --version 如果结果显示错误,你就需要安装这个工具. 1.Ubuntu 用户可以使用下述命令安 ...

  2. targetSdkVersion和与target属性的区别

    参考:http://blog.csdn.net/dai_zhenliang/article/details/8175781 AndroidMenifest.xml中targetSdkVersion和p ...

  3. db2,用户名密码不对导致无法连接数据库: Reason: User ID or Password invalid. ERRORCODE=-4214, SQLSTATE=28000

    文章目录 背景 解决 背景 qa需要db2的demo,运维给安装完db2,启动报错 com.ibm.db2.jcc.am.io: [jcc][t4][2013][11249][4.7.112] Con ...

  4. idea中如何查看jar包中的源码(非maven),以oracle的ojdbc为例

    文章目录 背景 解决 背景 工作需要查看oracle的部分源码(ojdbc.jar),maven并没有这个依赖,单纯的导入jar包无法查看. 解决 将ojdbc.jar 安装到本地仓库,maven从本 ...

  5. bigger is greater

    题目: Lexicographical order is often known as alphabetical order when dealing with strings. A string i ...

  6. 使用Python将字符串转换为格式化的日期时间字符串

    我正在尝试将字符串“20091229050936”转换为“2009年12月29日(UTC)” >>>import time >>>s = time.strptime ...

  7. Java-向上转型后调用方法和属性的注意事项

    /*多态的注意事项 (1)如果子类重写了父类方法, 意味着子类里定义的方法彻底覆盖了父类里同名的方法, 系统将不可能把父类里的方法转移到子类中 补充对(1)的个人理解: 当s向上转型传给了b, b即使 ...

  8. 函数中的toString

    function Person(){ this.name = name; this.age = age; this . gender = gender;  } //  创建一个Person实例 var ...

  9. ASP.NET MVC 解决账号重复登录问题

    解决重复登录 用到了 .net 身份票证 和Global全局处理文件 第一步 登录方法  传入用户名 private void GetOnline(string Name) { Hashtable S ...

  10. 召回率、AUC、ROC模型评估指标精要

    混淆矩阵 精准率/查准率,presicion 预测为正的样本中实际为正的概率 召回率/查全率,recall 实际为正的样本中被预测为正的概率 TPR F1分数,同时考虑查准率和查全率,二者达到平衡,= ...