Java 在Derby数据库中,如何;用户名";及;表所有者“;相关的,那么设置它们的简单方法是什么?

Java 在Derby数据库中,如何;用户名";及;表所有者“;相关的,那么设置它们的简单方法是什么?,java,hibernate,derby,squirrel-sql,Java,Hibernate,Derby,Squirrel Sql,我正在使用Derby学习Hibernate;我曾经把它作为一个嵌入式数据库,但是我的ant工作在填充数据时遇到了问题,所以我现在改用网络版本 除了Java/Hibernate程序外,我还使用Squirrel客户端访问数据库。我只想要一个尽可能简单的设置;我甚至不需要普通的安全、加密等 我一直在使用Squirrel创建数据库,使用sql脚本创建表。然后我在eclipse中运行一个ant作业,将数据放入表中。当我只有一个嵌入式数据库时,ant脚本会加载一条记录,然后说数据库“已经打开”;我切换到网络

我正在使用Derby学习Hibernate;我曾经把它作为一个嵌入式数据库,但是我的ant工作在填充数据时遇到了问题,所以我现在改用网络版本

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

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

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

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

无论我在hibernate配置中是否在URL上放置“username=admin;password=admin”,它都会显示我试图添加到的(第一个)表不存在

那么,有人能告诉我,要让Squirrel和Java/Hibernate在Derby数据库中访问彼此相同的表,我必须做些什么吗?我认为,对上面的术语——用户名、模式、限定名称和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)
);
下面是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>
jdbc:derby://localhost:1527/C:/Users/rcook/workspaceGalileoLaptop/BHChap3/BegHibernateDB;用户名=管理员;密码=管理员
org.apache.derby.jdbc.ClientDriver40
org.hibernate.dialogue.derbydialogue
0
假的

让我重复一遍;这对嵌入式数据库中的一条记录有效,因此我相信用于连接、创建映射对象、提交等的代码都有效;但我确信这两种访问方法的登录有问题。

每个数据库中确实有一个中间级别的表组织,称为“模式”;您可以在此处阅读有关Derby架构实现的更多信息:

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

select * from admin.aduser;
访问的表与访问的表不同

select * from rcook.aduser;

我从未在网络模式下使用过derby,只是嵌入的,但我认为如果在创建表时不指定模式名,它会将它放在您使用的用户名模式下。是的,你需要一个用户名/密码来连接任何数据库。我想你可能不需要这个答案。这个答案曾经有另外两个链接,它们是最有用的。谢谢()和()