我想直接从Firefox中的HTML页面中的JavaScript代码访问MySQL数据库。
这样的库是否存在?
非常清楚, CGI + Ajax无效
一些背景知识:我想为MySQL数据库创建类似GUI前端的东西(这不是它的本质,但它足够接近)。我正在考虑使用JavaScript作为本地HTML页面,但为了实现这一点,我需要在Firefox下使用MySQL绑定JavaScript。我已经有一个不到100个LOC的工作原型,但它需要一个Web服务器,并且由于超出这个问题的原因,这将无法工作。
注意:数据库和JavaScript代码都将在本地运行,而不是公共页面。事实上,HTML文件将作为file:////文件加载。我使用JavaScript的唯一原因是它是我需要的唯一可用的GUI系统。
我愿意安装插件,DLL,Windows依赖的东西或什么不能使它工作。
编辑:看起来答案是,“它可以完成,但它会很痛苦”。我的选择之一是将所有数据作为文件发出(丑陋,不太灵活,但它会起作用)我想我不会追求这个。
答案 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
正如我上面提到的,我没有测试任何东西,所以整个想法可能都不起作用......
答案 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