在Web服务中访问sqlite数据库文件的最佳方法

时间:2010-05-22 17:11:05

标签: java web-services sqlite

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

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

我的问题是,当我尝试形成JDBC连接字符串时,文件路径最终不正确。此外,部署和运行JUnit测试时,工作目录也不同。我在某处读到了将文件作为资源包含在内的情况,但是这方面的例子无处可见。

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

我对Web服务知之甚少,我只是需要它才能工作,所以请帮助我解决技术问题。

更新 为了将这一点放在上下文中,一些“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看到它们。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

  

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

Web服务应使用DataSource从应用程序服务器级别配置的连接池中检索连接。在单元测试中,使用您想要的任何内容(独立连接池,直接JDBC连接)。

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

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

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