在Derby数据库中,“username”和“table owner”如何相关,以及设置它们的简单方法是什么?

时间:2013-02-18 02:46:02

标签: java hibernate derby squirrel-sql

我正在使用Derby来学习Hibernate;我以前把它作为一个嵌入式数据库,但是用于填充数据的我的ant工作有问题,所以我转而使用网络版。

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

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

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

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

我是否在我的hibernate配置中的URL上放了“username = admin; password = admin”,它说我试图添加的(第一个)表不存在。

有人可以告诉我,要让Squirrel和Java / Hibernate在Derby数据库中相互访问相同的表,我该怎么做?我认为对Squirrel和/或Derby使用的上述术语 - username,schema,qualifiedName和simpleName的基本理解可能会有所帮助。

这是表创作之一:

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

这是hibernate配置文件:

<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>

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

1 个答案:

答案 0 :(得分:1)

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

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

select * from admin.aduser;

访问与

不同的表
select * from rcook.aduser;