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

java.sql.SQLException:接近“on”:语法错误问题

java.sql.SQLException:架构“ROOT”不存在