MySQL有JavaScript绑定吗?

6
我想在Firefox中的HTML页面中直接从JavaScript代码访问MySQL数据库。是否存在这样的库?
需要明确的是,CGI + Ajax无法使用。
背景:我想创建一个类似于MySQL数据库的GUI前端(虽然不完全相同)。我考虑使用JavaScript作为本地HTML页面来实现,但为了使其工作,我需要Firefox下JavaScript的MySQL绑定。我已经在100行以下的代码中有一个可工作的原型,但它需要一个Web服务器,由于某些原因,这种方式行不通。
注意:数据库和JavaScript代码都将在本地运行,并且不是公共页面。实际上,HTML文件将作为file:////文件加载。我之所以使用JavaScript,是因为它是我需要进行GUI操作的唯一可用系统。
我愿意安装插件、DLL、依赖Windows的东西或其他任何东西来使其工作。
编辑:看起来答案是,“可以做到,但会很痛苦”。由于我的一个选项是只将所有数据输出为文件(丑陋,而且不太灵活,但可以工作),因此我认为我不会继续追求这个问题。

奇怪的问题...是的。 糟糕的问题...不是。 所以点赞来抵消负评。 - Robert Gould
你有没有考虑过编写一个HTA以在Internet Explorer中使用?你可以使用JavaScript + 所有不安全的COM对象,进行ODBC调用,写入硬盘等等。你只是不能再使用Firefox了 - 但是值得一提的是,你已经把自己限制得相当多了。 - Tomalak
点赞,因为你让我产生了“嗯”的感觉。 - UnkwnTech
哦,糟糕。你在开玩笑吧。我唯一不愿意做的事情(即)是我能让它工作的唯一方式? - BCS
你也可以编写一个 Firefox 插件,但这可能需要更多的工作。 - Robert Gould
1
NoSQL数据库(如CouchDB)可以直接与Javascript通信,因为它们具有基于REST的接口(以及使用JSON / Javascript的文档,视图和过滤器)。 - Greg K
9个回答

4
JavaScript代码存在于浏览器中。它可以向外发出HTTP请求,但实际上不能做更多的事情。因此,按设计,您将无法绑定到本地运行的程序。如果MySQL公开了HTTP服务,那么可能是有可能的,但事实并非如此。如果您需要在JavaScript代码中访问数据库,不一定需要MySQL,请查看Google Gears。它是一个Firefox / Internet Explorer插件,可公开SQLite数据库和其他一些好东西。如果您提供有关您正在构建什么的更多信息,我们可能能够为您提供更好的建议...

我在MySQL中有一堆数据,所以无论我使用什么,都需要能够从那里加载它。 - BCS

2
不幸的是,您需要一个服务器。或者,如果您知道如何并且已经准备好被平台/浏览器锁定,您可以为所选的浏览器编写插件(据我所知,Internet Explorer没有DLL,因此您需要自己编写)。
您可能想要查看一下不需要设置的小型服务器。我修改了Lua的Xavante服务器,出于与您非常相似的原因,因此它可以在没有外部依赖项的情况下运行,因此我可以使用单个复制/粘贴安装/卸载应用程序。

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');      
};

1
你需要的是一个HTTP服务,它可以以JavaScript所需的方式公开要获取的数据。
一个小型的AJAX服务器端脚本(PHP、Perl、Ruby等),它需要一些参数并执行MySQL查询,以HTTP和JavaScript友好的方式将数据发送到客户端(例如作为image/jpeg或JSON)。
你无法设置任何有用的东西(一个工作的、跨浏览器的解决方案),使MySQL可用于JavaScript。JavaScript只能处理HTTP请求,其他就做不了了。在服务器端进行适应。

实际上,您描述的正是我想要摆脱的。在我的情况下,如果它只在我的电脑上运行,那将非常有用。 - BCS
好的,我明白了。也许你选择的技术(HTML + JavaScript)比你想象的更加阻碍你。如果你愿意安装dll、插件和依赖于Windows的东西来使其工作,那么你可以直接编写.NET应用程序或HTA。 - Tomalak
我正在开发一个.NET应用程序。这将是我第三次在除了HTML以外的任何东西上编写GUI(即使计算HTML也只有第五次)。 - BCS
1
祝你好运。:-) 与JavaScript框架相比,您将编写更多的LOC。但是您不会很快遇到这样的障碍。 - Tomalak

0

当然,如果JavaScript可以调用服务器,它也可以调用本地IP地址(192.168.x.x),并且可以使用在特定端口上侦听的程序进行处理。然后,所有程序需要做的就是与数据库进行交互,查找信息并将其传回JavaScript即可。


1
希望的是(曾经是?)避免需要那个粘合代码片段和额外的进程,而是让JS直接与MySQL服务器通信。 - BCS

0

我知道这是一个旧帖子,但我认为它仍然很相关。

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

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

希望对你有所帮助


0
我不能给你完整的答案,但是这里有一个一般的想法,如何只使用MySQL + Internet Explorer + JavaScript(未经测试)来完成它:

在JavaScript中,您可以通过使用以下方式调用Windows应用程序

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

所以这个想法是调用存储在SQL文件中的SQL语句,然后捕获和解析输出:mysql.exe
mysql.exe -h localhost -u root dbo < script.sql > output.txt

这个想法并非没有挑战:

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

正如我上面提到的,我还没有测试过任何东西,所以这个想法可能根本行不通...


0

有趣的问题。但您确保选择了具有许多自愿限制以限制对底层系统访问的语言/环境...

我喜欢罗伯特的建议,Xavante非常轻巧。

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

我在Google中搜索了“java applet jdbc”,看到了很多有前途的标题,IBM提供了这样一个小程序的源代码(用于DB2访问,但应该很容易适应)。

[编辑]还有另一种方法,即使用XPCOM DLL将mysqllib.dll打包起来,如Native code in javascript所述。我不知道如何真正地做到这一点,但也许它可以让您开始。


这些障碍源于不想转换到其他东西。如果我转换,所有这些问题都会消失,JS、HTML和除数据库之外的一切也会消失。 - BCS

0

那在服务器端应该可以工作(我想),但在客户端需要更多的工作。 - BCS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接