java - 找不到适合 jdbc :derby:<db-name> error on JDBC with Java DB on Linux/Ubuntu 的驱动程序

标签 java linux ubuntu jdbc javadb

准则的基本部分:
(摘自书籍:Java 如何编程第 10 版的示例,作者:Paul Deitel、Harvey Deitel(第 1063 页)):

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DisplayAuthors 
{
    public static void main(String args[])
    {
        final String DATABASE_URL = "jdbc:derby:books";

        try (  
                Connection connection =
                DriverManager.getConnection(DATABASE_URL, "user", "pass"); 
            )
        {
            // ...
        }
        catch (SQLException sqlException)                                
        {                                                                  
            sqlException.printStackTrace();
        }                                                   
    } 
}

我在 Ubuntu 16.04 上

虽然 Java 网站为 Java DB说数据库包含在 JDK 中,我有 经过几个小时的网络搜索得知openJDK java,推荐 在 Ubuntu 上安装,不附带 java 数据库。

The website有建议运行的有用信息:

sudo apt-get install sun-javadb-client sun-javadb-core

产生了错误并且没有安装。

所以我下载了 jdk-8u111-linux-x64.tar.gz,按照说明解压,只是为了安全起见(我相信,我可以将 JAVA_HOME、DERBY_HOME 设置为解压位置,这“成功了一半” “upto ij parts [见下文]),从我的/usr/lib/jvm/java-8-openjdk-amd64/中删除了所有内容,并替换为我下载的内容。

并将这些添加到我的 .bashrc 中:

JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
DERBY_HOME=/usr/lib/jvm/java-8-openjdk-amd64/db
export DERBY_HOME

按照书中的说明进入终端创建数据库并插入数据:

$JAVA_HOME/db/bin/ij
connect 'jdbc:derby:books;create=true;user=usr;password=pass';
run 'book-basic-table-create-and-insertions.sql';
exit;

它生成一个文件 books,其中包含 db info+/data。

在 ./中还有一个名为 derby.log 的文件,其中包含以下信息:

----------------------------------------------------------------
Wed Dec 14 19:01:58 EST 2016:
Booting Derby version The Apache Software Foundation - Apache Derby - 10.11.1.2 - (1629631): instance a816c00e-0158-ffc9-1471-000006d047c8 
on database directory /tmp/deleteme-IuI/books with class loader sun.misc.Launcher$AppClassLoader@6f94fa3e 
Loaded from file:/usr/lib/jvm/java-8-openjdk-amd64/db/lib/derby.jar
java.vendor=Oracle Corporation
java.runtime.version=1.8.0_111-b14
user.dir=/tmp/deleteme-IuI
os.name=Linux
os.arch=amd64
os.version=4.4.0-53-generic
derby.system.home=null
Database Class Loader started - derby.database.classpath=''
----------------------------------------------------------------
Wed Dec 14 19:04:25 EST 2016: Shutting down Derby engine
----------------------------------------------------------------
Wed Dec 14 19:04:27 EST 2016:
Shutting down instance a816c00e-0158-ffc9-1471-000006d047c8 on database directory /tmp/deleteme-IuI/books with class loader sun.misc.Launcher$AppClassLoader@6f94fa3e 
----------------------------------------------------------------

编译运行:

javac DisplayAuthors.java # compiles without error
java DisplayAuthors

程序输出:

java.sql.SQLException: No suitable driver found for jdbc:derby:books
at java.sql.DriverManager.getConnection(DriverManagerager.java:689)
at java.sql.DriverManager.getConnection(DriverManager.javaava:247)
at DisplayAuthors.main(DisplayAuthors.java:15)

如何让程序运行?

最佳答案

您缺少代码的加载驱动程序部分

例如

String driver = "org.apache.derby.jdbc.EmbeddedDriver";
...
try {
    Class.forName(driver); 
} catch(java.lang.ClassNotFoundException e) {
  ...
}

参见 http://docs.oracle.com/javadb/10.8.3.0/getstart/rwwdactivity3.html举个例子

编辑

作为证明,我做了以下事情

  1. 在 Eclipse 中创建简单的 java 项目
  2. 将 derby.jar、derbynet.jar 和 derbyclient.jat 添加到类路径

我的代码

public static void main(String[] args) {

    String driver = "org.apache.derby.jdbc.EmbeddedDriver";
    try {
        Class.forName(driver); 
    } catch(java.lang.ClassNotFoundException e) {
        e.printStackTrace();
    }

    final String DATABASE_URL = "jdbc:derby:myDB;create=true;user=user;password=pass";

    try (  
            Connection connection = DriverManager.getConnection(DATABASE_URL, "user", "pass"); 
        )
    {
        // ...
    }
    catch (SQLException sqlException)                                
    {                                                                  
        sqlException.printStackTrace();
    }        

}

这运行没有异常

关于java - 找不到适合 jdbc :derby:<db-name> error on JDBC with Java DB on Linux/Ubuntu 的驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41154803/

相关文章:

PHPMYADMIN 未在 Ubuntu12.04 中加载

ubuntu - 在 Ubuntu 上安装 Teambox。 Gherkin 2.3.3 安装失败

java - 即使脚本在数据库客户端 (MySQL) 中运行正常,Flyway 迁移也会失败

java - For 循环和 LinkedList 的索引错误

java - 是否可以读取正在写入 HDFS 的数据

linux - 如何在其包含的时间间隔内对文本文件中的项目进行排序

ubuntu - 为什么在 GNU/Linux 上停止(或重新启动)squid3 如此缓慢?

java - 在新窗口中自动提交表单

linux权限继承

linux - 日志文件备份并清空文件而不是在 linux 中删除