0

我正在使用 Derby 来学习 Hibernate;我曾经把它作为一个嵌入式数据库,但是我用数据填充它的 ant 工作遇到了麻烦,所以我正在切换到网络版本。

除了我的 Java/Hibernate 程序,我还使用 Squirrel 客户端访问数据库。我只想要一个尽可能简单的设置;我什至不需要正常的安全性、加密等。

我一直在使用 Squirrel 创建数据库,并使用 sql 脚本创建表。然后我从 Eclipse 中运行一个 ant 作业,将数据放入表中。当我只有一个嵌入式数据库时,ant 脚本会加载一条记录,然后说数据库“已经打开”;我切换到网络服务器模式以允许 ant 脚本执行多个记录。

松鼠客户端拒绝连接,除非有非0长度的用户名和密码,所以我输入了admin/admin。

当我这样做时,数据库表似乎以某种方式组织在用户名下。squirrel 中的“对象”窗口显示了数据库名称、ADMIN 和它下面的一些其他内容、TABLE 和 ADMIN 下的一些其他内容,然后是我在 ADMIN 下创建的表。ADMIN 没有出现在 Sql 脚本中,只出现在我用来创建和登录数据库的用户名中,所以我假设表在 ADMIN 下,因为那是我的用户名;我不知道它还会从哪里来。

无论我是否将“username=admin;password=admin”放在我的休眠配置中的 URL 上,它都表示我尝试添加的(第一个)表不存在。

那么有人可以告诉我我必须做什么才能让 Squirrel 和 Java/Hibernate 在 Derby 数据库中访问彼此相同的表吗?我认为对上述术语的基本理解——用户名、模式、qualifiedName 和 simpleName,因为它们被 Squirrel 和/或 Derby 使用,可能会起到作用。

这是表创建之一:

create table AdUser
(   id bigint generated by default as identity (start with 1),
    name varchar(255),
    password varchar(255),
    primary key (id),
    unique(name)
);

这是休眠配置文件:

<property name="hibernate.connection.url"> jdbc:derby://localhost:1527/C:/Users/rcook/workspaceGalileoLaptop/BHChap3/BegHibernateDB;username=admin;password=admin</property>
<property name="hibernate.connection.driver_class"> org.apache.derby.jdbc.ClientDriver40 </property>
<!--  <property name="hibernate.connection.username">sa</property>  -->
<!--  <property name="hibernate.connection.password"></property> -->
<property name="hibernate.dialect">   org.hibernate.dialect.DerbyDialect  </property>

<property name="hibernate.connection.pool_size">0</property>
<property name="hibernate.show_sql">false</property>

让我重复一遍;这适用于嵌入式数据库中的一条记录,因此我相信用于连接、创建映射对象、提交等的代码都可以正常工作;但我确信我在使用两种访问方法的登录时做错了。

4

1 回答 1

1

每个数据库内部确实有一个中间级别的表组织,称为“模式”;您可以在此处阅读有关 Derby 架构实现的更多信息:http: //db.apache.org/derby/docs/10.9/ref/rrefschemaname.html

请注意,架构名称默认为您的用户名,但您始终可以在查询中明确指定架构名称:

select * from admin.aduser;

访问不同的表

select * from rcook.aduser;
于 2013-02-18T16:16:42.903 回答