【问题标题】:Best way to access a sqlite database file in a web service在 Web 服务中访问 sqlite 数据库文件的最佳方式
【发布时间】:2010-05-22 17:11:04
【问题描述】:

我第一个关于堆栈溢出的问题。

我使用 netbeans 创建了一个包含 Web 服务的 Java Web 应用程序(我希望 Web 应用程序是正确的选择)。我按原样使用 Web 应用程序,没有额外的框架。此 Web 服务使用 sqlite JDBC 驱动程序来访问 sqlite 数据库文件。

我的问题是当我尝试形成 JDBC 连接字符串时文件路径最终不正确。此外,在部署和运行 JUnit 测试时,工作目录是不同的。我在某处读到了有关将文件作为资源包含在内的信息,但没有看到这样的示例。

无论如何,在部署 Web 服务和“本地”测试它时,打开 sqlite 数据库的最佳方式是什么?

我对网络服务了解不多,我只是需要它来工作,所以请帮助我解决技术问题。

更新 在上下文中稍微说明一下,一些“println”代码给出了这个:

从一个简单的 JUnit 测试打印工作目录给出了

C:\MinaFiler\Work\SOA\BusTimetableWS

调用类似的 web 服务方法返回

C:\Program Files\sges-v3\glassfish\domains\domain1

连接字符串是通过将“jdbc:sqlite:”添加到当前绝对路径中形成的:

C:\MinaFiler\Work\SOA\BusTimetableWS\src\java\miun\bustimetable\database\sqlit\BusTimetableWS.db

但是,这失败了,因为我的测试抛出异常,指出数据库表不存在,尽管它们确实存在,我可以使用 sqlite3.exe 看到它们。

【问题讨论】:

  • 真正的文件路径是上面介绍的第三个。

标签: java web-services sqlite


【解决方案1】:

一种方法是使用一个配置文件,您可以从那里读取并获取您的连接字符串。

我确定您使用的框架有某种标准的保存配置的方式。

另一种选择是将数据库放置在主执行文件的已知相对路径中。然后在执行时获取当前目录,并从该路径中查找数据库。

【讨论】:

  • 我用一些细节更新了我的问题。在配置方面,我目前将数据库文件路径作为 VM 选项属性传递,-D
【解决方案2】:

无论如何,在部署 Web 服务和“本地”测试它时,打开 sqlite 数据库的最佳方式是什么?

Web 服务应使用DataSource 从应用服务器级别配置的连接池中检索连接。在你的单元测试中,使用你想要的任何东西(一个独立的连接池,一个直接的 JDBC 连接)。

但是在这两种情况下,为什么不在 jdbc url 中使用数据库文件的绝对路径呢?来自How to Specify Database Files

jdbc:sqlite:C:/work/mydatabase.db

如果您这样做,工作目录将无关紧要。

【讨论】:

  • 好的,像往常一样,问题比预期的要容易.. VM 选项中的属性名称错误。但是,您仍然可以解释或指导我了解有关此 DataSource 和连接池的信息。
猜你喜欢
  • 2011-08-07
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
相关资源
最近更新 更多