jdbc:derby 找不到合适的驱动程序:JDBC 上的 <db-name> 错误与 Linux/Ubuntu 上的 Java 数据库
No suitable driver found for jdbc:derby:<db-name> error on JDBC with Java DB on Linux/Ubuntu
准则的基本部分:
(摘自书籍中的示例: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 中,但我有
经过几个小时的网络搜索后了解到打开JDK 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 到提取的位置,"half-worked" 最多 ij 部分[见下文]),删除了我的 /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 示例
编辑
作为证明,我做了以下事情
- 在 Eclipse 中创建简单的 java 项目
- 将 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 如何编程第 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 中,但我有 经过几个小时的网络搜索后了解到打开JDK 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 到提取的位置,"half-worked" 最多 ij 部分[见下文]),删除了我的 /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 示例
编辑
作为证明,我做了以下事情
- 在 Eclipse 中创建简单的 java 项目
- 将 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();
}
}
运行无异常