【问题标题】:HTML/JS as interface to local SQLite databaseHTML/JS 作为本地 SQLite 数据库的接口
【发布时间】:2012-05-15 06:17:12
【问题描述】:

我正在编写一个非常简单的数据库应用程序,我希望将其存储在本地(而不是查找远程数据库)。我喜欢用 HTML/Javascript 来设计界面,而且它们是跨平台的(每个人都有浏览器!),所以我真的很想写一个网页作为前端。不应涉及客户端/服务器交互 - 我只希望用户能够使用浏览器而不是本机程序与数据库交互。

但是,我可以看到从浏览器访问数据库的唯一方法是使用 WebSQL 或 IndexedDB 之类的东西。然而,这两者都抽象出管理数据库文件本身的过程,并将其存储在用户设置中的某个地方。我想将数据库文件本身与应用程序一起分发。

简而言之:有没有办法使用 HTML/Javascript 来修改本地 SQLite 数据库文件?还是 HTML 不是我应该用于此类应用程序的工具?

编辑: possibly relevant

【问题讨论】:

  • Javascript 无法写入本地文件。但是,您可以在第一次发送一个 js 文件来存储值。您是否考虑过使用 HTML/JS 进行开发并可以访问文件系统的 Adob​​e AIR?
  • 之前和AIR没太大关系,我去查一下。我想尽可能地减少依赖,但我认为我不能用纯 HTML/JS 做到这一点。

标签: javascript html sqlite web-sql


【解决方案1】:

这就是我最终所做的:

here 所述,您可以使用 Python 创建本地 Web 服务器。 This 教程为服务器处理程序提供了一个基本的基础设施。我不得不处理一些问题,可能是由 Python 3 或使用 Chrome 访问我的本地页面引起的。

我的 GET 处理函数最终看起来像这样:

def do_GET(self):
    try:
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.send_header('Access-Control-Allow-Origin', '*')
        self.end_headers()
        try:
            fn = GETHANDLERS[self.path[1:]]
            self.wfile.write(fn().encode("utf-8"))
        except KeyError:
            self.wfile.write(self.path.encode("utf-8"))
        return
    except:
        self.send_error(404, 'File Not Found: {0}'.format(self.path))

其中GETHANDLERS 是将 URL 映射到函数的字典 - 例如,如果您访问 http://localhost/my_func,则会调用 GETHANDLERS['my_func'] 函数。如果该 URL 不存在函数,则该 URL 只是回显。

我已经使用sqlite3 模块实现了操作本地SQLite 数据库的函数。以下是列出Categories 表中所有内容的查询示例:

import sqlite3

def get_categories():
    con = sqlite3.connect('my.db')
    c = con.cursor()
    c.execute('''SELECT * FROM Categories;''')
    return [cat[0] for cat in c.fetchall()]

GETHANDLERS["categories"] = get_categories

要使用本地应用程序,用户需要安装 Python,然后在打开网页之前运行服务器脚本。我认为这是可以接受的!

【讨论】:

    【解决方案2】:

    如果你真的只想要一个客户端应用程序,你真的应该考虑使用 HTML5 技术(WebSQL,Indexed DB)。这里有一个很好的阅读:html5 doctor。您需要将数据库导出到某个地方,或者让用户导出数据库,当用户重新加载页面时,数据库应该重新连接。例如:export websql to a csv-file

    【讨论】:

    • 我找到了很多关于如何导出数据库的文档,但是有没有从 CSV 导入的好方法?然后,例如,第一次加载应用程序时,我可以将本地 CSV 中的所有数据导入浏览器的数据库。
    • hmm 你可以尝试使用这个解析器 purbayubudi.wordpress.com/2008/11/09/… ,但我建议使用 xml 导出和导入你的数据库,因为更简单 w3schools.com/ajax/ajax_xmlfile.asp
    【解决方案3】:

    您可以使用 sqlite3 连接器并从 HTA 应用程序连接到本地数据库文件。

    这是连接器(必须按照页面上的说明注册 dll)

    https://www.assembla.com/spaces/litex/documents

    查看 zip 文件中的 HTA Demo App(DLL 在 \litex\bin 文件夹中,hta 在脚本文件夹中..)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      相关资源
      最近更新 更多