dsl 上下文创建:
private val resource =
Thread.currentThread().contextClassLoader.getResource("mock-data.db")!!
private val conn =
DriverManager.getConnection("jdbc:h2:${resource.path};AUTO_SERVER=TRUE")
val appDslContext get():DSLContext = DSL.using(conn, SQLDialect.H2)
插入语句:
val alarmEvent = MonitorAlarmEventEntity(....)
appDslContext.newRecord(MonitorAlarmEvent.MONITOR_ALARM_EVENT).apply {
from(alarmEvent)
}.insert()
// works fine, I can see the inserted row was printed.
println(
appDslContext.select().from(MonitorAlarmEvent.MONITOR_ALARM_EVENT) .fetchInto(MonitorAlarmEventEntity::class.java)
)
重新运行应用程序后,我仍然只看到一条记录,之前的记录丢失了。
我可以看到两个可能的问题:要么你没有正确关闭 H2 数据库,要么你没有使用可写文件。
要解决第一个问题,只需确保在应用程序退出之前通过调用
Connection
来清理 close()
。
对于第二个,我想类路径中的资源是不可直接写入的。但是,您正在使用路径创建连接,所以我不确定这将如何解决。如果这是问题所在,我希望您会在日志中看到异常。无论哪种情况,这在生产中都行不通。您希望数据库文件与应用程序代码分开。