【问题标题】:Creating Derby in Memory DB SQLSyntaxException在内存数据库 SQLSyntaxException 中创建 Derby
【发布时间】:2013-09-17 20:42:34
【问题描述】:

我正在尝试在内存数据库中创建一个 Derby 进行测试,以镜像我们使用的 Oracle 数据库。我尝试执行我们用来设置 Oracle 数据库的第一个脚本,但我得到了 SQLSyntaxException。

马文:

<dependency>
   <groupId>org.apache.derby</groupId>
   <artifactId>derby</artifactId>
   <version>10.10.1.1</version>
</dependency>

代码:

private static String sqlStatement ="set echo on\n" + 
        "set feedback on\n" + 
        "set serveroutput on\n" + 
        "var start_date  varchar2(80);\n" + 
        "var start_date  varchar2(80);\n" + 
        "var end_date    varchar2(80);\n" + 
        "var sid         varchar2(10);\n" + 
        "var host        varchar2(30);\n" + 
        "var user        varchar2(30);\n" + 
        "spool DS_Create_Schema.log;\n" + 
        "\n" + 
        "begin\n" + 
        "  select to_char(sysdate, 'mm-dd-yyyy hh24:mi:ss') into :start_date from dual;\n"
        ...

final String sql = sqlStatement;
final String connURL = "jdbc:derby:memory:memdatabase;create=true";
Connection conn = null;
try {
    conn = DriverManager.getConnection(connURL);
    PreparedStatement ps = conn.prepareStatement(sql);

    boolean success = ps.execute();
    System.out.println("Memory database created: " + success);


} catch (SQLException e) {...

【问题讨论】:

  • set feedback on 和所有其他命令都是 SQL*Plus 命令 - 特定于 Oracle 的命令行工具。它们在其他任何地方都不起作用(它们甚至不是常规的 SQL 语句——因此您甚至无法在 Oracle 数据库中运行该 Java 程序)。为什么你认为 Derby 理解 Oracle 命令行客户端的专有命令?

标签: java oracle maven derby


【解决方案1】:

Derby 不支持您的大部分 Oracle SQL*PLus,您必须将其转换为更标准的 SQL。

【讨论】:

  • SQL*Plus 命令甚至无法通过 JDBC 对 Oracle 数据库运行
  • @Greg-449,你知道其他内存数据库支持这些脚本吗?
  • 据我所知,这都是 Oracle 工具特有的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 2014-05-27
相关资源
最近更新 更多