【问题标题】:Are there JavaScript bindings for MySQL?MySQL 有 JavaScript 绑定吗?
【发布时间】:2008-11-18 07:32:24
【问题描述】:

我想直接从 Firefox 中 HTML 页面中的 JavaScript 代码访问 MySQL 数据库。

这样的库存在吗?

非常清楚,CGI+Ajax 不起作用

一些背景知识:我想为 MySQL 数据库创建类似于 GUI 前端的东西(这不是它的本质,但它已经足够接近了)。我正在考虑将其作为使用 JavaScript 的本地 HTML 页面来执行,但要使其工作,我需要 Firefox 下的 JavaScript 的 MySQL 绑定。我已经有一个不到 100 LOC 的工作原型,但它需要一个 Web 服务器,并且由于这个问题之外的原因,它无法工作。

注意:数据库和 JavaScript 代码都将在本地运行,而不是作为公共页面。事实上,HTML 文件将作为 file://// 文件加载。我使用 JavaScript 的唯一原因是它是唯一可用的系统,可以在我需要的地方执行 GUI 操作。

我愿意安装插件、DLL、依赖于 Windows 的东西或不让这个工作的东西。


编辑:看起来答案是“可以做到,但会很痛苦”。我的选择之一是将所有数据作为文件吐出(丑陋,不太灵活,但它会起作用)我想我不会追求这个。

【问题讨论】:

  • 奇怪的问题...是的。不好的问题……不。所以赞成反对反对票
  • 您是否考虑过编写用于 Internet Explorer 的 HTA 的可能性?您可以使用 JavaScript + 所有不安全的 COM 对象,进行 ODBC 调用,写入硬盘,等等。你不能再使用 Firefox - 但是 FWIW,你已经把自己绑在了很多东西上。
  • 赞成,因为你让我“哼”了一声
  • 哦,粗鲁。你开玩笑。我唯一不愿意做的事情 (IE) 是我让它发挥作用的唯一方法?
  • 像 CouchDB 这样的 NoSQL 数据库可以直接与 Javascript 通信,因为它们具有基于 REST 的接口(以及使用 JSON/Javascript 的文档、视图和过滤器)。

标签: javascript mysql firefox


【解决方案1】:

JavaScript 代码存在于浏览器中。它可以向外部发出 HTTP 请求,但实际上不多。因此,按照设计,您将无法绑定到本地运行的程序。如果 MySQL 确实公开了 HTTP 服务,那可能是可能的,但事实并非如此。

您也许可以找到一个将 MySQL API 暴露给 JavaScript 的 Firefox 插件,但我不知道有这样的插件。

如果您不是特别需要 MySQL,而只是需要一个可通过 JavaScript 代码访问的数据库,请查看 Google Gears。这是一个 Firefox / Internet Explorer 插件,它公开了一个 SQLite 数据库和其他一些好东西。

如果您提供有关您正在尝试构建的内容的更多信息,我们也许可以为您提供更好的建议...

【讨论】:

  • 我在 MySQL 中有一堆数据,所以无论我使用什么,我都需要能够从那里加载它。
【解决方案2】:

Javascript 可以访问 MySQL...但通常只能在服务器上。我已经用 Rhino 完成了,这是一个基于 java 的 javascript 解释器。只包括 MySQL 驱动程序,并且它可用。我想你也可以用一个小程序来做到这一点。

使用 Rhino,它会是这样的:

var DATABASE = {

    database: 'blog_development',
    host: 'localhost',
    username: 'dbuser',
    password: 'dbpass'

};

function ArticleModel(properties) {
  for (var p in properties) {
    this[p] = properties[p];
  }
}

ArticleModel.findAll = function() {
    var results = [];

    var jsConnectionObj = new Packages.MysqlConnection();
    c = jsConnectionObj.open(DATABASE.host,
                             DATABASE.database,
                             DATABASE.username,
                             DATABASE.password);

    if (c) {
      var s = c.createStatement();
      s.executeQuery("SELECT * FROM articles;");
      var rs = s.getResultSet();
      while (rs.next()) {
          results.push(new ArticleModel({
            id: rs.getInt("id"),
            title: rs.getString("title"),
            body: rs.getString("body")
          }));
      }
      rs.close();
      c.close();  
      return results;
    }

    throw new Error('could not connect to database');      
};

【讨论】:

    【解决方案3】:

    很遗憾,您需要一台服务器。或者,如果您知道如何并准备好锁定平台/浏览器,您可以为您选择的浏览器编写一个插件(据我所知,Internet Explorer 没有 DLL,因此您需要自己编写一个)。

    您可能想研究一个不需要设置的小型服务器。我修改了 Lua 的 Xavante 服务器,原因与你的非常相似,所以它运行时没有外部依赖项,因此我可以通过一次复制/粘贴来安装/卸载应用程序。

    【讨论】:

      【解决方案4】:

      您需要的是一个 HTTP 服务,该服务公开您希望使用 JavaScript 获取的数据。

      一个面向 AJAX 的小型服务器端脚本(PHP、Perl、Ruby 等),它接受一些参数并执行 MySQL 查询,以 HTTP 和 JavaScript 友好的方式将数据发送到客户端(例如图像/jpeg 或 JSON)。

      您将无法设置任何有用的东西(一个有效的跨浏览器解决方案)以使 MySQL 可用于 JavaScript。 JavaScript 可以做 HTTP,仅此而已。在服务器端适配。

      【讨论】:

      • 实际上,您所描述的正是我想要摆脱的。同样在我的情况下,如果它只在我的计算机上运行将会很有用。
      • 好的,我明白了。也许您选择的技术(HTML + JavaScript)比您想要的更多。如果您愿意安装 dll、插件和依赖于 Windows 的东西来完成这项工作,您也可以继续编写 .NET 应用程序或 HTA。
      • 我正在开发一个 .NET 应用程序。这将是我第 3 次在 HTML 以外的任何东西上做 GUI(而且只有大约第 5 次甚至计算 HTML)
      • 祝你好运。 :-) 与使用 JavaScript 框架所能做的相比,您将编写更多的 LOC。但你不会很快遇到这样的障碍。
      【解决方案5】:

      有趣的问题。但是您肯定会消除很多障碍,选择具有很多自愿限制的语言/环境来限制对底层系统的访问......

      我喜欢罗伯特的建议,Xavante 真的很轻量级。

      否则,我认为可行的解决方案是使用具有 JDBC 访问权限的 Java 小程序。我认为您需要签署小程序,这应该不是问题。

      我在 Google 中搜索了 java applet jdbc,看到很多有前途的标题,IBM 提供了此类 applet 的源代码(用于 DB2 访问,但它应该很容易适应)。

      [编辑] 还有另一种方法,用 XPCOM DLL 包装 mysqllib.dll,如 Native code in javascript 中所述。不知道如何真正做到这一点,但也许它可以让你开始。

      【讨论】:

      • 障碍是因为不想换别的东西。如果我切换,所有这些问题都会消失,就像 JS、HTML 和除了 DB 之外的所有东西一样。
      【解决方案6】:

      当然,如果 javascript 可以调用服务器,它可以调用本地 IP 地址 (192.168.x.x),并且可以使用侦听特定端口的程序进行处理?那么程序所要做的就是与数据库交互,找到信息并将其传递回javascript?

      【讨论】:

      • 希望是(曾经?)避免在它需要的额外过程中需要那段胶水代码,而是让 JS 直接与 MySQL 服务器对话。
      【解决方案7】:

      我不能给你完整的答案,但这里是你如何使用 MySQL + Internet Explorer + JavaScript(未经测试)做到这一点的一般想法:

      在 JavaScript 中,您可以使用调用 Windows 应用程序

      var myshell = new ActiveXObject( "WScript.shell" );
      myshell.run( program names );
      

      所以想法是调用mysql.exe,将SQL语句存储在SQL文件中,然后捕获并解析输出:

      mysql.exe -h localhost -u root dbo < script.sql > output.txt
      

      这个想法并非没有挑战:

      • 调用mysql.exe之前需要修改SQL文件
      • 您需要打开并解析输出文件

      正如我上面提到的,我没有测试过任何东西,所以整个想法甚至可能都行不通......

      【讨论】:

        【解决方案8】:

        如果你使用 node.js,我想你可能想看看这个。 http://nodejsdb.org/

        【讨论】:

        • 这可以在服务器端工作(我认为),但需要更多的工作客户端。
        【解决方案9】:

        我知道这是一个旧线程,但我认为它仍然是相关的。

        我在浏览器中使用了backbone.js 作为客户端库。这简化了(几乎是微不足道的)浏览器内的数据访问。

        它依赖于服务器上的 RESTful 服务,这些服务很容易提供。例如,您可以使用 node.js、phpwebsockets 或 socket.io

        HTH

        【讨论】:

          猜你喜欢
          • 2016-11-03
          • 1970-01-01
          • 1970-01-01
          • 2018-10-23
          • 2011-12-15
          • 2020-07-09
          • 1970-01-01
          • 2017-12-20
          • 2010-12-29
          相关资源
          最近更新 更多