是否有针对MySQL的JavaScript绑定?

时间:2008-11-18 07:32:25

标签: javascript mysql firefox

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

这样的库是否存在?

非常清楚, CGI + Ajax无效

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

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

我愿意安装插件,DLL,Windows依赖的东西或什么不能使它工作。


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

9 个答案:

答案 0 :(得分:4)

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

您可能能够找到一个将MySQL API暴露给JavaScript的插件,但我不知道任何这样的插件。

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

Javascript可以访问MySQL ...但通常只能在服务器上访问。我是用基于java的javascript解释器Rhino完成的。刚刚包含MySQL驱动程序,它可用。我想你也可以用applet来做这件事。

使用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 :(得分:1)

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

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

您将无法设置任何有用的(一种可用的,跨浏览器的解决方案),使MySQL可用于JavaScript。 JavaScript可以做HTTP,就是这样。适应服务器端。

答案 4 :(得分: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文件
  • 您需要打开并解析输出文件

正如我上面提到的,我没有测试任何东西,所以整个想法可能都不起作用......

答案 5 :(得分:0)

有趣的问题。但是你肯定会遇到很多障碍,选择一个有很多自愿限制的语言/环境来限制对底层系统的访问......

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

否则,我认为一个可行的解决方案可能是使用具有JDBC访问权限的Java applet。我想你需要签署applet,这应该不是问题。

我搜索了Google中的 java applet jdbc 并看到了许多有前途的游戏,IBM提供了这样的applet的源代码(用于DB2访问,但它应该很容易适应)。

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

我在浏览器中使用了backbone.js作为客户端lib。这简化了(几乎无关紧要的)浏览器内的数据访问。

它取决于服务器上的RESTful服务,并且可以轻松提供这些服务。举例来说,您可以使用node.js,phpwebsockets或socket.io

HTH