【问题标题】:Error is java.sql.SQLSyntaxErrorException: Schema 'ROOT' does not exist [duplicate]错误是 java.sql.SQLSyntaxErrorException:架构“ROOT”不存在 [重复]
【发布时间】:2025-12-16 14:00:01
【问题描述】:

我正在创建使用 derby 嵌入式数据库的桌面应用程序,虽然当我使用 derby 作为客户端数据库时它工作正常,但我想将此数据库嵌入我的桌面应用程序然后它会抛出错误 下面是帮助代码,看看吧

public class TaxInvoice extends javax.swing.JFrame {

 //String connectionurl = "jdbc:derby://localhost:1527/embdIDA1db";

 String connectionurl = "jdbc:derby:embdIDA1db;create=true;user=root;password=root";

 Connection conn = null; 

 ResultSet rs;

 String po_no = null;

/**
 * Creates new form TaxInvoice
 */
public TaxInvoice() {
    initComponents();
    String dt = sdf.format(cal.getTime());
    cur_date.setText(dt);
    try{
        Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
        conn = DriverManager.getConnection(connectionurl,"root","root");
        String sql="Select * from IMPORTED_CSV";
        Statement s = conn.createStatement();
        s.executeQuery(sql);
        rs = s.getResultSet();
        while(rs.next()){
            po_no = rs.getString("PO_NO");
            jTextField1.setText(po_no);
        }
        rs.close();
        s.close();
    }
    catch(Exception e){
        System.out.println("Error is"+e);
    }
}

错误是

Error isjava.sql.SQLSyntaxErrorException: Schema 'ROOT' does not exist

【问题讨论】:

  • 不要对代码使用“引用格式”!
  • @AndrewThompson 感谢您让我的代码适合提问
  • 您必须先发出 CREATE TABLE 语句来创建 IMPORTED_CSV 表,然后才能从中进行选择。此外,要获取有关 Derby 方面出了什么问题的更多信息:wiki.apache.org/db-derby/UnwindExceptionChain 并学习在磁盘上找到您的 derby.log 文件并阅读它,它将包含更多信息,特别是如果您使用 -Dderby.language.logStatementText 运行=真。
  • 当我使用 derby 作为客户端数据库时,它工作正常,但我想将此数据库嵌入到我的桌面应用程序中,然后它会抛出错误 1. cd /home/path -to-dist 2. 将您的数据库复制到 path-to-dist 文件夹。 IE。 /home/path-to-dist/embdIDA1db 3. java -jar app.jar

标签: java jdbc syntax-error derby


【解决方案1】:

您的 connectionURl 应该是 jdbc:derby://localhost:1527/embdIDA1db,这似乎在您的代码中被注释掉了。

您正在明确传递用户名和密码,因此无需将它们包含在 url 中。

DriverManager.getConnection(connectionurl,"root","root");

【讨论】:

  • 实际上该 url 用于客户端连接,但我希望我的数据库嵌入到我的应用程序中,以便我在我想要的任何其他系统上使用它
  • 是的,但它仍然会抛出同样的错误
【解决方案2】:

你能试试这个吗?

private static String dbURL = "jdbc:derby://localhost:1527/embdIDA1db;create=true;user=root;password=root";

【讨论】:

  • 实际上该 url 用于客户端连接,但我希望我的数据库嵌入到我的应用程序中,以便我在我想要的任何其他系统上使用它
【解决方案3】:

为了完成这项工作,
为 derby 使用默认模式
即 user="App" 密码 = ""

例如:

       try 
        {
            // Configures and loads Database
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
            Connection conn = DriverManager.getConnection("jdbc:derby:myDB;create=true", "APP" , "");

        } catch (Exception ex) 
        {
            System.out.println(ex);
        }  

或者您可以使用

创建架构
CREATE SCHEMA <schema name>

【讨论】: