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