使用derby数据库编译java程序时出现db.lck

时间:2015-06-08 16:29:56

标签: java netbeans derby netbeans-8 javadb


最近,我一直在尝试使用NetBeans 8.0连接到德比数据库。经过大量研究( link1 link2 link3 link4 )和其他任何地方我都无法理解如何让它消失。我意识到这就是原因: - db.lck那个我没有连接到嵌入式apache derby DB。

我注意到在编译Java程序时出现了db.lck这是我拒绝嵌入式apache derby连接的原因吗?

N.B: -
1。我连接到JavaDB服务器。
2。编译程序时断开与DB的连接。
3。添加了相关的jar文件derby.jar。使用默认架构APP创建了数据库,使用的用户名和密码均为app 5.从连接字符串中删除create=true选项 6.我可以通过NetBeans 8.0中的SQL控制台查看和操作数据

提供以下代码以供进一步参考:

test.java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class test
{
public static void main(String args [])
{
    try { 
            Connection con = DriverManager.getConnection("jdbc:derby:C:/Users/Dhruvh/Documents/NetBeansProjects/ApacheDerby/derbytest","app","app");
            PreparedStatement stmt=con.prepareStatement("select * from \"APP\".TABLE1");
            ResultSet rs=stmt.executeQuery();
            if(rs.next())
            {
               System.out.println("Id : "+rs.getInt(1) +" "+" name :"+rs.getString(2));
            }
            else
            {
              System.out.println("No word matching in database");
            }
        } catch (SQLException err) {
           System.out.println(err.getMessage());
        }
    }
}

我也尝试过使用: -

PreparedStatement stmt=con.prepareStatement("select * from APP.TABLE1");
PreparedStatement stmt=con.prepareStatement("select * from TABLE1");
PreparedStatement stmt=con.prepareStatement("select * from app.table1"); //table was created in lower case

但我上面提到的一切都给出了同样的错误: - 的 Table/View 'APP.TABLE1' does not exist.

堆栈跟踪:

java.sql.SQLSyntaxErrorException: Table/View 'APP.TABLE1' does not exist.
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.TransactionResourceImpl.wrapInSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedPreparedStatement42.<init>(Unknown Source)
at org.apache.derby.jdbc.Driver42.newEmbedPreparedStatement(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source)
at test.main(test.java:12)

Caused by: ERROR 42X05: Table/View 'APP.TABLE1' does not exist. at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) at org.apache.derby.impl.sql.compile.FromBaseTable.bindTableDescriptor(Unknown Source) at org.apache.derby.impl.sql.compile.FromBaseTable.bindNonVTITables(Unknown Source) at org.apache.derby.impl.sql.compile.FromList.bindTables(Unknown Source) at org.apache.derby.impl.sql.compile.SelectNode.bindNonVTITables(Unknown Source) at org.apache.derby.impl.sql.compile.DMLStatementNode.bindTables(Unknown Source) at org.apache.derby.impl.sql.compile.DMLStatementNode.bind(Unknown Source) at org.apache.derby.impl.sql.compile.CursorNode.bindStatement(Unknown Source) at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source) at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source) at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown Source)

同时证明所创建的数据库的快照
enter image description here

请告知是否需要进一步的参考资料来解决问题。

感谢您的耐心

1 个答案:

答案 0 :(得分:0)

您给出了一个不存在的数据库的derby位置,因此它尝试自己创建数据库。

jdbc:derby:C:/Users/Dhruvh/Documents/NetBeansProjects/ApacheDerby/src/derbytest;**create=true**

粗体部分是您在创建驱动程序时遗漏的默认参数。

您可以连接到数据库,但不存在您要访问的表。您必须修复数据库的位置。此外,如果您通过程序连接到数据库(看起来像mplab x?),则需要先终止该连接。