当前位置: 首页 > 知识库问答 >
问题:

带Derby的ActiveRecord如何设置Derby架构

佟阳云
2023-03-14

见下面的“更新”,我现在知道这是问题的症结所在。

我有一个遗留的Derby数据库,我想制作一个Rails应用程序来与之交互。
我正在使用RVM,所以这是我采取的步骤:

1. rvm install jruby (installed 1.6.7.2)

2. rvm use jruby

3. gem install rails 

4. rails new myapp

5. add "gem 'activerecord-jdbcderby-adapter'" to Gemfile of new rails app

6. bundle

7. copied my derby db folder (named 'perm') under db in the rails app

8. changed database.yml as follows:

  development:
    adapter: jdbcderby
    database: db/perm

然后我创建了一个模型文件,并使用set_table_name将其设置为一个表名,当我运行rails c时,我得到一个异常,即该表不存在。

我做的时候也在控制台上

ActiveRecord::Base.connection.tables

唯一返回的表是“schemamigrations”。

我知道数据库没有任何问题,因为我可以连接到这个确切的副本并使用 SquirrelSQL 查看所有表。此外,rails 应用程序以某种方式连接,因为当我打开控制台时,我无法使用 SquirrelSQL 连接到同一实例,反之亦然。

有没有人对为什么活动记录看不到表格有任何建议?

更新:

这个问题与 derby 如何将表“组织”到同一个文件中的多个“模式”有关。当我从 rails 创建一个新表(即迁移)时,该表最终进入“SA”模式。我所有的旧表都在“APP”架构中(也许我可以移动它们,但如果我可以避免它,我不想这样做......其他应用程序会损坏)。因此,当我以这种方式从轨道访问数据库时,就像只有“SA”模式存在一样。如何告诉 Rails “使用”“App”模式(早期我尝试在表名前面加上前缀,但这不起作用)?

我相应地重新命名了这个问题。

更新#2:

显然,jdbcderby gem支持“模式”设置。根据猜测,我尝试将database.yml更改为以下内容:

development:
  adapter: jdbcderby
  database: db/perm
  schema: app (also tried APP)

当我在控制台中执行 ActiveRecord::Base.connection.tables 时具有应用程序(或 APP)架构设置时,我从应用程序架构中获取表列表(列表显示的表名称全部小写,没有架构名称)。

但是我仍然无法访问这些表。当我在一个现有的表上创建一个模型文件并试图访问它时,我得到一个JDBC错误:“Schema 'SA '不存在”。我尝试了各种set_table_name调用,但都没有成功。

据我所知,我的数据库没有什么不寻常的。但是没有任何关于如何做到这一点的信息。我是地球上唯一一个尝试在Rails中使用传统Derby数据库的人吗?

共有1个答案

庄经国
2023-03-14

库名db/perm是相对于当前工作目录进行解释的,而当前工作目录可能不是您认为的目录。请尝试(1)在硬盘中搜索文件derby.log,该文件可能是在您的rails应用程序的实际当前工作目录中创建的,或者(2)指定derby数据库的绝对文件路径,而不是相对文件路径。

如果问题出在模式上,Derby 支持 SET SCHEMA 语句: http://db.apache.org/derby/docs/10.8/ref/rrefsqlj32268.html

如果未显式设置架构,则默认为连接时使用的用户名,因此还可以通过以所需用户名登录来间接设置架构。

 类似资料:
  • 在RedHat测试服务器中,我安装了hadoop 2.7,并运行了Hive、Pig 我把IP作为localhost,因为它是单节点机器。之后我甚至无法连接到Hive。这是抛出错误 线程"main"中的异常java.lang.RuntimeException:java.lang.RuntimeException:无法实例化org.apache.hadoop.hive.ql.metadata.Sess

  • Apache Derby是Apache软件基金会所研发的开放源码数据库管理系统;由于Derby是一个纯Java程式,因此只需要操作系统支援Java虚拟机,Derby便可执行。 Derby是特别地为Java环境进行优化,Derby本身不仅是一个纯Java程式,而且Derby在执行用户的SQL程式时,能够把SQL编译成Java bytecode并以系统的Java虚拟机执行。由于SQL程式转成的Java

  • 问题内容: 我正在使用这些代码在derby数据库中创建表。 我的数据是这样存储的。 但是我希望我的数据像这样存储 我应该如何处理我的数据类型? 问题答案: 使用定义了精度和小数位数的DECIMAL类型: 的代表的允许数目(两个向左和小数POIN的右侧)的总位数,以及表示允许小数的位数。因此,上面的示例定义了一个十进制数字,该数字最多允许5位数字,小数部分为2位数字。

  • 问题内容: 在Derby服务器中,如何使用模式的系统表中的信息来创建select语句,以便检索每个表的约束名称? 问题答案: 相关手册是《Derby参考手册》。有许多版本可用:10.13是2017年4月的最新版本,但在2009年5月是10.3的最新版本。 原始答案 由于Derby的最新版本要求系统目录表的前缀在kiwicomb123的注释中引用了10.13 ,因此可以修改查询以使用显式的JOIN表

  • 我正试图根据本指南在eclipse上安装derby 我的$类路径: 我还通过项目属性将其添加到Java构建路径中。现在,每当我运行我的程序时,它都会说: 有什么解决方案吗?我的代码:导入java。sql。联系导入java。sql。DriverManager;导入java。sql。编制的报表;导入java。sql。结果集;导入java。sql。SQLException;导入java。sql。陈述 导

  • 问题内容: 根据此链接,没有提及支持4.2hibernate的derby方言。 Hibernate不支持Apache Derby吗? 问题答案: 如果您查看javadoc,则还有更多方言。截至对此问题进行最新更新时,它们是: (已弃用,请参见HHH-6073), , 和 。 对于10.7之后的Derby版本,假设没有添加新的Derby方言类,则该方言是最合适的。(但是,如果发生这种情况,建议选择小