0

我有一个关于在例如 Java 中使用对象关系数据库的理论问题。我知道有类似 ORM(例如:Hibernate)的东西,它提供将数据库表映射到类,但我也可以通过 JDBC 进行操作(创建连接并通过 Java 执行 sql 查询)。有没有办法使用第二种方法(普通 JDBC 机制)在对象数据库中进行查询?感谢您的帮助,也许还有一些样品;)

4

4 回答 4

1

ORM are wrapper on top of SQL. They are not rocket science. If you don't prefer Object Query Languagues (like HQL), yes you can do plain SQL queries (for sure in Hibernate using method createSQLQuery(...))

EDIT:

Based on Ricardo comment, if you are looking for SQL on object database, AFAIK, I don't think there is any support at this moment.

于 2013-10-22T17:40:58.890 回答
0

我发现了一些可能与 Caro2 所要求的内容有关的东西,不幸的是,它与对象数据库无关,而是与一个名为 Neo4J 的图形数据库有关。

该特定图形数据库具有JDBC 驱动程序,该驱动程序通过 JDBC 接口接受 Cypher 查询(Neo4J 图形查询语言之一)。它允许您查询图形数据库,而不是使用 SQL,而是使用它自己的查询语言。它支持 JDBC API,例如 executeQuery 和 executeUpdate 方法,并允许您导航 ResultSet 等。

所以这意味着面向对象的数据库可以有JDBC驱动,只要开发者能够将面向对象的查询语言与JDBC API相匹配。然后可以使用 JDBC 直接查询 OODB,使用其 JDBC 驱动程序将查询/更新/删除命令置于 OO 查询语言语法中。

于 2013-11-04T11:40:24.117 回答
0

有真正的面向对象的数据库,称为对象存储。将它们视为通常驻留在内存中的类的持久存储。如果这就是您所说的“是否有任何方法可以使用第二种方法在对象数据库中进行查询”,那么答案是否定的。

由于多种原因,真正的对象存储无法支持 SQL 查询。

  1. 对象中的数据是封装的,因此选择对象的内部数据字段变得很麻烦,并且受制于公开的封装规则(公共、私有、受保护、包保护)。

  2. 对象存储中的数据是相互连接的,因为它们的引用也原封不动地存储。因此,“选择”一个对象会为您提供它直接和间接引用的整个对象网络。

  3. 对象关系查询语言更类似于可以转换为 SQL 查询的类对象语法。这意味着对象关系查询语言不是对象存储的 SQL 模拟。对象存储直接支持不同的查询语言,使用对象查询语言在提取数据方面没有比使用 SQL 查询更大的用处。

不幸的是,我不知道对象存储的标准查询语言。也许有一个,但对象存储很少使用,如果它是“一堆'标准'争取成为一个真正的标准”,我不会感到惊讶。即使使用 SQL,该标准的定义也相当松散,更像是“一堆共享基本语法结构的方言”。

于 2013-10-22T18:27:25.010 回答
0

我认为您不能使用 JDBC 访问纯面向对象的数据库。并非没有将 SQL 转换为对象查询语言的驱动程序(即,与 ORM 框架所做的相反)。

于 2013-10-22T18:10:33.497 回答