Derby Embedded与jar文件抛出数据库未找到异常

时间:2014-02-21 06:22:29

标签: java derby

您好我创建了一个带有简单Java应用程序的derby嵌入式数据库。 当在eclipse上运行测试时,它运行得很完美。然后我导出为可运行的jar文件。通过cmd运行 没有找到异常数据库.. !!!

public class Main {

    public static void main(String[] args) throws SQLException {
    final String driver="org.apache.derby.jdbc.EmbeddedDriver";
    final String url="jdbc:derby:db/testdb";

    try {
        Class.forName(driver);
        Connection connection=DriverManager.getConnection(url);

        //connection.createStatement().execute("create table channels(channel varchar(20),topic varchar(20))");
    //  connection.createStatement().execute("insert into channels (channel,topic) values('hbo','action')");
    //  System.out.println("saved");
        PreparedStatement preStmt=connection.prepareStatement("select * from channels");
        ResultSet set=null;
        set=preStmt.executeQuery();

        while(set.next()){


            System.out.print(set.getString(1));
            System.out.println(set.getString(2));

        }       

    } catch (ClassNotFoundException e) {

        e.printStackTrace();
    }

    }

错误

Exception in thread "main" SQL Exception: Database 'db/testdb' not found.
        at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
        at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
        at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Sourc

我需要的是,当我在其他启用java的PC上运行jar文件时,它必须运行.. !!! 我已经尝试过在其他电脑上它给了我同样的错误..! 我怎样才能创建数据库.... !! 有人知道请帮忙..!

2 个答案:

答案 0 :(得分:0)

构建jar后,转到项目文件夹并复制dist文件夹。将其移动到新位置,并将数据库文件夹复制到刚刚移动的新dist文件夹中。应该这样做;大多数时候,当人们遇到Derby问题时,这是因为Java文件路径。

答案 1 :(得分:0)

关于Derby模式创建的神奇之处在于jdbc url本身。

让我用Java 8 Derby来详细说明。运行 cmd

添加与环境路径相关的Derby:

cd D:\Project\derbydb
set JAVA_HOME=C:/Program Files/Java/jdk1.8.0_92
set DERBY_HOME=C:/Program Files/Java/jdk1.8.0_92/db
set PATH=%PATH%;%DERBY_HOME%/bin

执行 ij 命令以使用Derby。

D:\Project\derbydb>ij
ij version 10.11
ij> CONNECT 'jdbc:derby:testdb;create=true';

url =" jdbc:derby:testdb; create = true" 时,[D:\ Project \ derbydb \ testdb]文件夹会自动从其运行位置初始化。然后,我们可以像任何其他数据库一样使用Derby。

ij> CREATE TABLE cart (
      item VARCHAR(50),
      price DECIMAL (10,5),
      dt TIMESTAMP,
      primary key (item)
    );
ij> select * from cart;

Derby存储库存在后,我们可以从任何地方连接它。

C:\Users\oraclesoon>ij
ij version 10.11
ij> CONNECT 'jdbc:derby:D:\\Project\\derbydb\\testdb';
ij> select * from cart;