从 Java 中的 InputStream 加载 SQLite 作为 ReadOnly
Posted
技术标签:
【中文标题】从 Java 中的 InputStream 加载 SQLite 作为 ReadOnly【英文标题】:Load SQLite from InputStream in Java as ReadOnly 【发布时间】:2012-06-22 11:44:12 【问题描述】:我有一个应用程序,它接收 SQLite 数据库来读取一些数据并将其导出为 CSV。我正在尝试将其上传到 Google App Engine,但我遇到了一个巨大的问题,我认为这使得该应用无法使用 GAE。
问题在于,由于在 GAE 上我无法写入文件系统,因此无法打开与 SQLite 文件的 JDBC 连接,因此无法读取数据以转换为 CSV。我一直在寻找其他选项,例如谷歌云存储,但我不想在这个应用程序上使用我唯一的“免费试用”,实际上我不想在之后为这个应用程序付费免费试用期结束,所以这不是一个选项。
经过大量研究,我唯一的猜测是我可能能够直接从 InputStream 加载数据库,因为我是从我用来获取它的上传表单中收到的,但是,这是 100% 的幸运猜测,我无法在网上找到任何关于这种方法的信息,但我只是不想相信任何现有的 SQLite JDBC 库都无法做到这一点,我希望这里有人能告诉我怎么做。
如果 InputStream 方法不可行,但您知道在 GAE 中以只读方式打开 SQLite DB 的其他方法,然后将其丢弃,请随时发表评论...
如果有另一个选项,如“不要使用 JDBC,使用带有管道的套接字连接来打开与 InputStream 的连接”,我也想听听,它不必使用 JDBC .
谢谢
【问题讨论】:
【参考方案1】:JDBC 一般需要套接字,所以在 GAE 上不起作用。
我会尝试dump SQLite to CSV,将文件上传到GAE,然后parse CSV contents 并插入数据库。
【讨论】:
谢谢,但这不是我的应用程序所期望的行为,我希望它是 SQLite 到 CSV 的“转储程序”,并且只是将 CSV “原样”返回给用户。跨度> “我有一个应用程序,它接收 SQLite 数据库来读取一些数据并将其导出为 CSV” “JDBC in general needs sockets”不适用于 SQLite,它需要一个原生库。 @DonalFellows,你所说的“原生库”是什么意思?我想知道更多,也许你可以给我一个链接或什么的。谢谢! @hectorg87 SQLite 是一个无服务器数据库——不需要套接字——但它是用 C 编写的,因为它使用一些相当复杂的 I/O 来使提交正常工作,因此它需要一个本机作为其 JDBC “连接器”(实际上是数据库引擎本身)的一部分的库。【参考方案2】:简短的回答是“无法完成”。至少当前的 JDBC 实现不是这样,而且实现一个可行的方法可能非常困难,我去了 SQLite 用户邮件列表,最后得出了结论。
您可以关注here 的线程,但在此之前您必须将register 加入邮件列表,因为它是私人的。
【讨论】:
以上是关于从 Java 中的 InputStream 加载 SQLite 作为 ReadOnly的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Java 中的 InputStream 打开 MS Access 文件?
JAVA之InputStream加载网络图片(填充到src)
java将InputStream呈现为ByteBuffer而不将整个内容加载到数组中
如何读取服务器套接字 JAVA 中的所有 Inputstream