更新表时 H2 数据库“重命名文件时出错”
Posted
技术标签:
【中文标题】更新表时 H2 数据库“重命名文件时出错”【英文标题】:H2 database "Error while renaming file" when updating a table 【发布时间】:2011-02-02 10:25:14 【问题描述】:我正在使用最新版本的 H2,即版本 1.3.150,并且在更新 VARCHAR2 时收到 org.h2.jdbc.JdbcSQLException。
SQL语句很简单
UPDATE STAMP_TABLE SET DESCRIPTION='a bit of text' WHERE STAMPID='s/1'
而表本身并没有什么特别之处,就是一堆VARCHAR2和一个BLOB
它第一次工作,第二次失败并显示错误消息:
Error while renaming file "C:\my\local\path\1.t6.lob.db" to "C:\my\local\path\1.temp.lob.db"
使用SQL语句的方法如下:
public void updateStampDescription(StampId stampId, String description) throws SQLException
PreparedStatement stmt = null;
try
stmt = conn.prepareStatement(UPDATE_STAMP_DESCRIPTION);
stmt.setString(1, description);
stmt.setString(2, stampId.getId());
logger.debug("SQL statement: " + stmt.toString());
stmt.execute();
catch(SQLException ex)
logger.error("Error while updating table " + STAMPS_TABLE_NAME + ", description column: " + ex.getMessage() );
ex.printStackTrace();
throw ex;
finally
if(stmt!=null) stmt.close(); // Also closes the ResultSet
知道有什么问题吗?
【问题讨论】:
您能否也发布堆栈跟踪(包括根本原因)?这是一台Windows机器吗?我知道尝试重命名仍然打开的文件时的问题(基本上,你不能在 Windows 上)。在任何情况下,可以通过将数据库升级到新格式来解决这个问题,其中 BLOB 存储在数据库中而不是外部文件 - 请参阅h2database.com/html/tutorial.html#upgrade_backup_restore @Thomas,关于 Windows 的好点子,因为我还没有在 Linux 上看到过这种情况。 【参考方案1】:我会回答我自己的问题:
实际上,该项目位于 Dropbox 文件夹中,当时 Dropbox 正在使用这些文件,因此无法按照 H2 的要求重命名。
【讨论】:
很高兴知道问题出在哪里,谢谢!对于 H2,计划是尽可能删除那些外部文件。 H2 版本 1.3 不再为 BLOB 和 CLOB 数据创建单独的文件。在某些情况下(大型查询、大型事务)仍会创建一些临时文件,删除它们需要更长的时间。 1.3版确实在这个问题上做了很大的改进,即使还有一些临时文件,很高兴知道你们正在努力。以上是关于更新表时 H2 数据库“重命名文件时出错”的主要内容,如果未能解决你的问题,请参考以下文章
H2:打开连接,更新,关闭连接,现在我所有的更改都消失了吗?
H2 - 使用 SQL 语句“SELECT * FROM null T”访问链接表时出错