java.sql.SQLException:[Microsoft][ODBC Microsoft Access Driver] 无法更新。数据库或对象是只读的
Posted
技术标签:
【中文标题】java.sql.SQLException:[Microsoft][ODBC Microsoft Access Driver] 无法更新。数据库或对象是只读的【英文标题】:java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Cannot update. Database or object is read-only 【发布时间】:2012-08-09 15:11:18 【问题描述】:我正在使用 Spring 3.1.2 和 Hibernate 4.1.5_SP1。我正在尝试将 CSV 文件导入到动态创建的 Access 文件中。代码如下所示:
final SingleConnectionDataSource ds = new SingleConnectionDataSource();
ds.setUrl(myBean.getMicrosoftAccessDriverUrl() + file.getAbsolutePath());
final JdbcTemplate jdbcTemplate = new JdbcTemplate(ds);
final String strSQL = "SELECT * INTO " + accessTableName + " FROM
[Text;HDR=YES;DATABASE=" + csvFile.getPath()+ ";].[" +
csvFile.getName() + "]";
jdbcTemplate.execute(strSQL);
ds.getConnection().close();
这会产生如下错误:
org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad
SQL grammar
[SELECT * INTO myTable
FROM [Text;HDR=YES;DATABASE=C:\somePath;].[myAccessFile.accdb]];
nested exception is java.sql.SQLException: [Microsoft][ODBC Microsoft
Access Driver] Cannot update. Database or object is read-only.
我的数据源 URL 类似于:
jdbc:odbc:Driver=Microsoft Access Driver (*.mdb, *.accdb);DBQ=C:\somePath\myAccessFile.accdb
我检查了文件,它们不是只读的。有关如何解决此问题的任何建议?
谢谢!
【问题讨论】:
您是否获得了strSQL
值并尝试在 SQL Server 中运行它?
如果您的access数据库被另一个会话打开,您将无法更新。关闭 Access 数据库会话。
我检查得很彻底,我没有看到它在其他任何地方打开过。我在语句执行后关闭它
很遗憾,我没有安装 SQL Server 来测试它。
【参考方案1】:
FROM
子句对我来说看起来不正确。
SELECT * INTO myTable
FROM [Text;HDR=YES;DATABASE=C:\somePath;].[myAccessFile.accdb]
我以为您打算从 CSV 导入 Access 表。如果是这样,我认为您应该使用 CSV 文件名代替 Access 文件 (myAccessFile.accdb
)。
SELECT * INTO myTable
FROM [Text;HDR=YES;DATABASE=C:\somePath;].[YourFile.csv]
【讨论】:
嗯,我的真实代码确实显示了 csv 文件,但我的日志显示了访问文件输出。我会仔细检查那里发生了什么。 是的,就是这样。我的 FileFilter 破坏了早期的代码,并且错误地将访问文件发送到 csv 导入函数而不是 csv 文件。以上是关于java.sql.SQLException:[Microsoft][ODBC Microsoft Access Driver] 无法更新。数据库或对象是只读的的主要内容,如果未能解决你的问题,请参考以下文章
Oracle DB:java.sql.SQLException:关闭连接
Cause: java.sql.SQLException: 请求的转换无效 ; uncategorized SQLException for SQL []; SQL state [99999]; er
java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 发生错误
Java:Sqlexception:位置不支持的 SQL92 令牌:178