关于堆栈溢出的第一个问题。
我创建了一个包含使用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看到它们。
答案 0 :(得分:0)
一种方法是使用您可以读取的配置文件并从那里获取连接字符串。
我确信你使用的框架有某种标准的保存配置方式。
另一种选择是将db放在主执行文件的已知相对路径中。然后在执行时获取当前目录,并从该路径中查找数据库。
答案 1 :(得分:0)
无论如何,在部署Web服务和“本地”测试时,打开sqlite数据库的最佳方法是什么?
Web服务应使用DataSource
从应用程序服务器级别配置的连接池中检索连接。在单元测试中,使用您想要的任何内容(独立连接池,直接JDBC连接)。
但在这两种情况下,为什么不在jdbc url中使用数据库文件的绝对路径?来自How to Specify Database Files:
jdbc:sqlite:C:/work/mydatabase.db
如果您这样做,工作目录无关紧要。