我有以下设置:
mybase.odb基mybase.odb shell(convertToUrl(Tools.Strings.DirectoryNameOutOfPath( _
ThisComponent.Parent.getURL(), "/") & "myReport.cmd"), HIDE)myReport.cmd包含: :: From: http://hsqldb.org/doc/2.0/guide/listeners-chapt.html#lsc_listener_types
start /min java -cp %~dp0driver/hsqldb.jar org.hsqldb.server.Server
--database.0 file:mydb --dbname.0 mydb
timeout /t 3
:: From: http://jasperstarter.cenote.de/index.html
jasperstarter -v pr %~dp0myReport.jasper -r -o . -f pdf
-H [localhost|127.0.0.1] --db-port 9001 -n mydb -u myuser插入换行符以便于阅读。
HSQLDB服务器成功地启动:
..。服务器@1742700:启动顺序在382毫秒内完成。服务器@1742700: 2016-05-09 23:05:49.129 HSQLDB服务器2.3.2在端口9001 .
后续的JasperStarter没有显示任何错误,但没有创建PDF。
在HSQLDB服务器输出Server@1742700之后,我也尝试过(希望渺茫):
jasperstarter ... -H 1742700 ... -n Server都没有用。
在myReport.cmd中,下面的内容就像一个独立的魅力:
jasperstarter pr %~dp0myReport.jasper -r -o . -f pdf -t generic
--jdbc-dir %~dp0driver --db-driver org.hsqldb.jdbcDriver
--db-url jdbc:hsqldb:file:%~dp0database/mydb;sql.syntax_mys=true;shutdown=true
-u myuser插入换行符以便于阅读。
当然,如果mybase.odb是开放的,则不会:
无法连接数据库:数据库锁获取失败: lockFile: org.hsqldb.persist.LockFile@68306856file =\database\mydb.lck、exists=true、locked=false、valid=false,方法: checkHeartbeat读取: 2016-05-09 21:25:13心跳-读:-6188 ms。
顺便问一下,当锁文件存在时,为什么是locked=false?
发布于 2016-05-09 22:51:33
一次只有一个Java进程可以连接到一个文件:数据库。该消息指示第二个进程无法获取锁,因为锁文件是由其他进程创建的,并且确实存在。
您应该更改设置,以便在启动LibreOffice之前启动HSQLDB。然后,LibreOffice连接到服务器数据库,您的宏不再启动服务器,而只是使用server启动报表生成器。
发布于 2016-05-10 20:03:32
根据fredt的回答,我创建了一个myapp.cmd,它包含:
start "My DB Server" /min java -cp %~dp0driver/hsqldb.jar org.hsqldb.server.Server
--database.0 file:%~dp0database/mydb --dbname.0 mydb
timeout /t 2
start /b /max %~dp0mybase.odbmyReport.cmd现在只包含:
jasperstarter -v pr %~dp0myReport.jasper -r -o %~dp0 -f pdf
-H localhost --db-port 9001 -n mydb -u myuser我意识到:
jasperstarter ... -o .不像预期的那样起作用。对于'.‘,它将C:\Program Files (x86)\LibreOffice 5\program作为输出目录(如果从Base中调用,则可以理解)。因此,我将其更改为绝对%~dp0。
https://stackoverflow.com/questions/37126030
复制相似问题