【问题标题】:Is it necessary to create tables each time you connect the derby database?每次连接derby数据库都需要建表吗?
【发布时间】:2014-05-24 16:16:20
【问题描述】:

我使用 Eclipse 数据库开发视角手动创建了一个模式和几个表。但是,每当我尝试从代码访问表时,都会收到“架构不存在”错误。但是,如果我在使用它们之前在我的程序中创建表,一切顺利。每次连接数据库时都必须创建表吗?因为,我正在测试我的代码,所以我必须多次重启项目。

【问题讨论】:

  • 如果您有一个数据库,并在该数据库中创建表,除非删除该表,否则它们不会被删除。您是否知道这些表可能会被丢弃在某个地方?
  • @Drew 他们怎么会这样?我的意思是我可以在 DB Perspective 中看到我手动创建的模式和表。但是从代码来看,一个简单的select语句给出了Schema不存在的错误。
  • 好问题!并且得到了。你能验证这些表是否真的是通过 Apache 提供的任何接口来检查数据库的吗?
  • 是的!我从 SYS.SYSTABLES 中选择了所有表,但它没有显示我创建的表。但为什么?如何同步它,以便每当我手动创建表格时它也会显示在代码中?
  • 嗯...介意分享您用于创建表格的代码吗?

标签: sql database eclipse derby


【解决方案1】:

当您认为您已经创建了表时,“表不存在”的三个常见原因:

  1. 您正在连接的数据库与您想象的不同,并且由于您在连接 URL 上指定了“create=true”,Derby 悄悄地为您创建了一个新的空数据库。
  2. 您正在使用 Derby 的“内存中”配置,这意味着当数据库关闭(或您的应用程序退出)时,数据库的所有内容都会消失。
  3. 您正在以不同的用户身份连接到数据库,并且您没有发出 SET SCHEMA 语句,因此您使用的是基于您的用户名的默认架构名称,因此这两个架构是不同的,并且具有完全不同的表,因此当您使用其他架构时,您创建的表似乎不存在。

【讨论】:

  • 你能解释一下第3节吗?我应该使用什么 SET SCHEMA 语句?
  • @CrazySynthax 我知道这太远了。但是这个答案仍然为我节省了很多时间。那么什么是 SET SCHEMA?这是对您的连接对象的调用,例如connection.setSchema("SCHEMA_NAME")
猜你喜欢
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
相关资源
最近更新 更多