我想将Derby嵌入式数据库连接到我的Swing应用程序以导出为可执行文件。
我已经执行了以下步骤。
我已经从“服务”选项卡创建了嵌入式数据库。
我已经在嵌入式数据库中创建了表
ALL_OBJECTS = {}
def build():
ALL_OBJECTS[ 'copperKey' ] = engine.Item()
...
def on_door_unlock():
del ALL_OBJECTS[ 'copperKey' ]
...
create table student(id int, name varchar(50), class varchar(10));
insert into student values(1,'Akshay','FYCS'),(2,'Narayan','SYCS');
我已经创建了Swing项目并添加了Derby Driver库
然后我编码为从数据库检索值
select * from student;
我遇到这样的错误
package embeddeddb;
import java.sql.*;
public class EmbeddedDB
{
public static void main(String[] args) throws SQLException, ClassNotFoundException
{
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection con=DriverManager.getConnection("jdbc:derby:myDB","username","password");
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("select NAME from STUDENT where ID=1");
rs.next();
System.out.println(rs.getString(1));
}
}
我知道问题出在连接字符串上。
run:
Exception in thread "main" java.sql.SQLException: Database 'myDB' not found.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.newSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.handleDBNotFound(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source)
at org.apache.derby.jdbc.InternalDriver.getNewEmbedConnection(Unknown Source)
at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at embeddeddb.EmbeddedDB.main(EmbeddedDB.java:11)
Caused by: ERROR XJ004: Database 'myDB' not found.
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown Source)
... 14 more
C:\Users\Dell 7559\AppData\Local\NetBeans\Cache\10.0\executor-snippets\run.xml:111: The following error occurred while executing this line:
C:\Users\Dell 7559\AppData\Local\NetBeans\Cache\10.0\executor-snippets\run.xml:94: Java returned: 1
BUILD FAILED (total time: 0 seconds)
如何解决?请帮忙。
答案 0 :(得分:3)
mydb
是相对于Derby系统目录的相对路径,如果您使用Derby Embedded,则默认为应用程序的当前工作目录。如果在Netbeans中使用URL,则该URL相对于NetBeans当前工作目录,如果在自己的应用程序中使用该URL,则相对于该应用程序当前工作目录。
换句话说,jdbc:derby:myDB
使用的数据库是特定于应用程序的(或更正确的是:特定于当前工作目录)。在NetBeans中,数据库存在,而在应用程序中则不存在。
您将需要使用数据库的绝对路径,或者确保在适当的位置(例如,应用程序的当前工作目录)创建数据库,或者需要通过设置将Derby配置为使用特定目录系统属性derby.system.home
。
另请参阅Derby文档Connecting to databases,尤其是Connecting to databases within the system和Defining the system directory