我正在使用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>
让我再说一遍;这适用于嵌入式数据库中的一条记录,因此我相信连接,创建映射对象,提交等代码都可以正常工作;但我确信我对两种访问方法的登录做错了。
答案 0 :(得分:1)
每个数据库中确实存在一个中间级别的表组织,称为“模式”;您可以在此处阅读有关Derby架构实现的更多信息:http://db.apache.org/derby/docs/10.9/ref/rrefschemaname.html
请注意,架构名称默认为您的用户名,但您始终可以在查询中明确指定架构名称:
select * from admin.aduser;
访问与
不同的表select * from rcook.aduser;