2010-03-21 27 views
0

我们通常通过SQL与RDBMS进行接口。即我们创建一个sql字符串并通过JDBC或ODBC或类似的方式将它发送到服务器。哪些关系数据库存在高级语言的公共API?

是否有任何RDBMS允许通过Java,C#,C或类似的API直接连接数据库引擎?我希望一个API,允许这样的结构(在一些任意的伪代码):

Iterator iter = engine.getIndex("myIndex").getReferencesForValue("23"); 
for (Reference ref: iter){ 
    Row row = engine.getTable("mytable").getRow(ref); 
} 

我想这样的事情是在什么地方隐藏的(并且可从)开源数据库,但我期待的东西,作为一个公共API被正式支持,所以当它发生变化时,至少会在发行说明中找到一个注释。

为了使这一点,实际上有一个“最佳”答案的问题:我喜欢语言在上面给定的顺序,我会更喜欢原型和研究工作成熟的API,虽然这些亦欢迎。

------------------更新----------------

貌似我一直没足够清楚。

我在看的是一个较低级别的API,类似于RDBMS可能在内部使用的。 RDBMS具有执行计划的概念,并且我正在寻找的API将允许我们实际执行执行计划,而无需指定预期结果,使用SQL或类似方法。

背后这个非常模糊的想法是实现一个DSL,它可以直接转换为RDBMS系统调用,无需通过SQL或类似的。

试图用另一种方式来解释它: Oracle得到了一条SQL语句,它解析了该语句,创建了一个执行计划,并最终使用一些内部API执行执行计划,这可能允许如下操作:从表中检索特定行,检索范围或rowid从索引,使用散列连接加入到行集合等等。我正在寻找该API(或类似的RDBMS在这可用)

----------尼尔评论后的另一个更新------------ ----

我认为这将是适当考虑我找了“ISAM”水平,在这篇文章的第二个小点的API:http://en.wikipedia.org/wiki/ISAM

+0

JDBC和ODBC都是公共API,供高级语言使用。我真的不清楚你在问什么。 – 2010-03-21 10:17:41

+0

@Neil Butterworth:我认为他要求一个像linq这样的接口/ API,它将SQL抽象为托管语言的“感觉”。 – lexu 2010-03-21 10:21:05

+0

你用过LINQ2Sql吗?它可能会给你一些你寻求的高级OO类型数据库的好处。 – slugster 2010-03-21 10:31:50

回答

0

我正在寻找的东西叫做ISAM,正如Neil Butterworth指出的那样。

所以维基百科文章http://en.wikipedia.org/wiki/Isam给出了一些观点来开始进一步的研究。

如果你碰巧发现这个有用的,请upvote上面的Neils评论。

2

您可能想看看下面的Wikipedia文章获取SQL关系数据库的替代接口列表:

该清单包括(按字母顺序):

0

.NET/C#中有LINQ。什么会看起来像一个例子是:

var results = from row in db.SomeTable 
       where row.Key == 23 
       select row; 

,你可以在“博物” C#像这样(即,上面是句法糖)写成:

var results = db.SomeTable.Where(row => row.Key == 23); 
0

JDBC和ODBC已经有你需要的东西。 尝试查看游标,例如this

语法不会像LINQ那样紧凑,但你会得到你可以迭代的行。

您可能还想检查object relational mapping,因为我认为这就是您最终想要的。此外,您可能会发现LINQ和其他方法适用于单行更新和简单检索,但对于常规数据库工作(多行更新,复杂检索,聚合等),SQL没有任何内容。 SQL是并且将是与RDBMS通信的最自然的方式,因为它是用于RDBMS的本地语言的

如果您不想使用SQL,您将不得不使用 a)herehere中描述的方法之一。请记住,这些是映射到SQL的完整API,并且最终它们不是简单的,它们在差异方面不同,通常不是那么有效(非自然的RDBMS)。 b)编写你自己的数据抽象层(可能使用a中提到的框架之一)为对象提供自然方法来与数据库交谈。通过这种方式,您将获得两全其美并且完全符合您的需求。虽然这真的在大型项目中发光。

相关问题