导读:本期聚焦于木下创作的《javadb搬家了吗?关于javadb地址变化的常见误解与正确解析方法详解》,敬请观看详情。不少初学者在网上搜索javadb时,会发现旧地址打不开或文档链接失效,于是误以为javadb搬家了甚至停止维护了。实际上javadb就是Apache Derby数据库的曾用名,它的下载地址和文档地址经历过规范化调整,导致部分老链接失效。本文将厘清javadb与Derby的关系,解释地址变化背后的原因,给出当前可用的官方下载入口,并通过完整的JDBC连接代码实例演示如何正确配置连接地址。同时总结了端口占用、驱动加载失败、路径包含中文等常见问题的排查方法与注意事项,帮助你快速定位并解决连接异常。

在学习和使用Java数据库的过程中,很多人第一次接触的数据库就是javadb。它随JDK一起分发,安装完JDK后无需额外下载数据库软件即可直接使用,因此成为不少教材和入门教程的首选。但当你按照网上找到的教程去访问javadb的地址时,经常会遇到页面404或者下载链接失效的情况,于是产生了一个疑问:javadb是不是搬家了?这篇文章就来把这个问题彻底讲清楚。

javadb搬家了吗?关于javadb地址变化的常见误解与正确解析方法详解

javadb到底是什么,它与Apache Derby是什么关系

首先要明确一点,javadb并不是一个独立的数据库产品,它只是Apache Derby数据库在Sun公司时代的名称。当年Sun Microsystems将Derby引入JDK发行包时,为了强调它与Java的紧密关系,将其命名为Java DB。后来Oracle收购了Sun,从JDK 7和JDK 8开始,安装目录下仍然保留了一个名为db的文件夹,里面就是Derby的完整发行版。

所以当你在JDK安装目录下看到C:\Program Files\Java\jdk1.8.0_XX\db这样的路径时,这里面装的其实就是Derby。文件夹中通常包含bin、lib、demo等子目录,其中lib目录下的derby.jar、derbyclient.jar、derbynet.jar就是我们后续编程要用的核心依赖包。

需要注意,从JDK 9开始,Oracle不再随JDK捆绑Java DB,需要单独去Apache官网下载Derby。这就是很多老教程链接失效的根本原因之一:不是数据库搬家了,而是发行方式变了。

关于javadb地址的几个常见误解

第一个误解是认为javadb的官方网站永久关闭了。实际上Derby项目一直由Apache软件基金会维护,项目主页始终在apache.org域名下。旧教程中出现的sun.com相关链接失效,是因为Sun的域名体系在Oracle收购后整体迁移,并不代表项目死亡。

第二个误解是认为连接地址和下载地址是同一个东西。很多人混淆了数据库的下载地址与JDBC连接URL。下载地址指向官网,而连接URL是程序内部使用的字符串,例如嵌入式模式下的jdbc:derby:testdb;create=true,客户端模式下的jdbc:derby://localhost:1527/testdb。链接打不开与连接失败是两类完全不同的问题。

第三个误解是认为Derby默认端口是3306。这是MySQL的默认端口,Derby网络服务器的默认端口是1527。如果你的连接代码里端口写错了,无论下载地址多么正确,程序都会报连接拒绝异常。

实例演示:正确的下载配置与JDBC连接代码

下面演示一个完整的流程。首先从Apache Derby官网下载bin发行版,解压后设置环境变量DERBY_HOME指向解压目录,并把%DERBY_HOME%\bin加入PATH。然后在项目中引入lib目录下的derby.jar和derbyclient.jar。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DerbyDemo {
    public static void main(String[] args) throws Exception {
        // 加载驱动,Derby 10.x及以前的版本建议显式加载
        Class.forName("org.apache.derby.jdbc.EmbeddedDriver");

        // 嵌入式模式:数据库文件创建在当前目录下的testdb文件夹
        String url = "jdbc:derby:testdb;create=true";
        try (Connection conn = DriverManager.getConnection(url);
             Statement stmt = conn.createStatement()) {

            stmt.executeUpdate("CREATE TABLE users (id INT, name VARCHAR(50))");
            stmt.executeUpdate("INSERT INTO users VALUES (1, 'zhangsan')");

            ResultSet rs = stmt.executeQuery("SELECT * FROM users");
            while (rs.next()) {
                System.out.println(rs.getInt("id") + " - " + rs.getString("name"));
            }
        }
        // 嵌入式模式退出前建议关闭数据库
        DriverManager.getConnection("jdbc:derby:;shutdown=true");
    }
}

上面是嵌入式模式的写法,数据库直接运行在JVM内部,适合单机学习和桌面程序。如果你需要多客户端同时访问,就要使用网络模式,先在命令行执行startNetworkServer.bat(Windows)或startNetworkServer(Linux),然后把驱动类换成org.apache.derby.jdbc.ClientDriver,URL改为jdbc:derby://localhost:1527/testdb;create=true

两种模式的取舍很简单:嵌入式省去部署、性能开销小,但只允许同一个JVM访问;网络模式支持并发,但多了一层网络通信成本。学习阶段用嵌入式,做小型多人应用再切换到网络模式即可。

常见问题排查与注意事项

第一类问题是驱动类找不到,报ClassNotFoundException。这基本都是classpath没有正确引入derby.jar导致的。使用IDE的话检查依赖配置,命令行编译的话要用-cp参数显式指定jar路径,不要想当然地以为设置了DERBY_HOME就够了。

第二类问题是端口被占用。启动网络服务器时报端口冲突,说明1527端口被其他进程占用了。可以用命令netstat -ano | findstr 1527查到占用进程的PID,再决定结束进程还是修改Derby的监听端口。

第三类问题是数据库路径包含中文或空格。Windows用户如果把数据库路径放在含中文字符的目录下,Derby可能无法正确创建或访问数据库文件。建议把工作目录设置在纯英文路径下,例如D:\derbydata,避免这类诡异问题。

最后提醒一点,嵌入式模式下数据库文件会被JVM锁定,程序没正常退出时文件锁不会释放,再次连接可能报另一个实例已连接的错误。遇到这种情况先检查是否有残留的java进程,或者删除数据库目录下的db.lck文件后再重试。掌握这些细节后,无论javadb的地址怎么变化,你都能快速定位问题所在。

javadb地址JDBC连接Derby数据库修改时间:2026-09-10 05:10:27

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260910/53830.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。