代码之家  ›  专栏  ›  技术社区  ›  Jens Schauder

哪些关系数据库存在于高级语言的公共API中?[关闭]

  •  -1
  • Jens Schauder  · 技术社区  · 15 年前

    我们通常通过SQL与RDBMS接口。也就是说,我们创建一个SQL字符串,并通过JDBC或ODBC或类似的方式将其发送到服务器。

    是否有任何RDBMS允许通过爪哇、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可能在内部使用的API。RDBMS有执行计划的概念,我正在寻找的API允许我们实际执行一个执行计划,而不用指定预期的结果,使用SQL或类似的方法。

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

    尝试用另一种方式来解释它:例如,当Oracle得到一个SQL语句时,它解析该语句,从中创建一个执行计划,最后使用一些内部API执行执行计划,这可能允许如下操作:从表中检索特定行,从索引中检索范围或行ID,加入到使用哈希联接等的行集。我正在寻找那个API(或者类似于RDBMS的东西,如果有这个的话)

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

    我认为考虑一下我正在寻找的“isam”级别的API是合适的,正如本文第二个要点: http://en.wikipedia.org/wiki/ISAM

    4 回复  |  直到 15 年前
        1
  •  2
  •   Daniel Vassallo    15 年前

    您可能需要查看以下维基百科文章,以获取关系数据库的SQL接口替代方案列表:

    列表包括(按字母顺序排列):

        2
  •  0
  •   Dean Harding    15 年前

    LINQ 对于.NET/Cα。一个例子是:

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

    你可以用“自然”C这样写(也就是说,上面是句法上的糖分):

    var results = db.SomeTable.Where(row => row.Key == 23);
    
        3
  •  0
  •   Unreason    15 年前

    JDBC和ODBC已经具备了您需要的功能。 例如,尝试查看光标 this .

    例如,语法不会像在LINQ中那样紧凑,但是您将获得能够迭代的行。

    您可能还需要检查 object relational mapping 因为我想这就是你最终想要的。

    此外,您可能会发现LINQ和其他方法在单行更新和简单检索方面工作得很好,但是对于一般数据库工作(多行更新、复杂检索、聚合等),没有什么比SQL更好的方法。SQL是和将是与RDBMS通信的最自然的方式,因为它是 这个 RDBMS的母语。

    如果不想使用SQL,则必须使用 a)所述方法之一 here here . 请记住,这些都是完全成熟的API,映射到SQL,最后它们是必不可少的,不简单,而且在pardigm中存在差异,通常没有那么有效(对于RDBMS来说是不自然的)。 b)编写自己的数据抽象层(可能使用a中提到的框架之一),为对象与数据库对话提供自然的方法。这样你就能得到最好的两个世界和确切的你需要的。虽然这在更大的项目中确实很出色。

        4
  •  0
  •   Jens Schauder    15 年前

    尼尔·巴特沃思正确地指出,我要找的东西叫做伊萨姆。

    所以维基百科的文章 http://en.wikipedia.org/wiki/Isam 提出了一些值得进一步研究的问题。

    如果你发现这个有用的,请向上投票尼尔评论以上。