java.sql.SQLException : [Microsoft][ODBC Microsoft Access Driver] Cannot update. 数据库或对象是只读的

标签 java spring hibernate ms-access

我正在使用 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

我检查了文件,它们不是只读的。关于如何解决这个问题有什么建议吗?

谢谢!

最佳答案

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]

关于java.sql.SQLException : [Microsoft][ODBC Microsoft Access Driver] Cannot update. 数据库或对象是只读的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11886479/

相关文章:

java - 使用 Java DOM 设置不带前缀的属性

java - Spring注入(inject)或 Autowiring 数据源bean到类

java - 引用另一个 .xml 中定义的 bean

java - 为什么 MariaDB 加载设置大约需要 5-8 分钟?

java - 启动 JVM 进行内联

Spring Data Rest用户存储库BCCrypt密码

java - PESSIMISTIC_WRITE 是否锁定了整个表?

java - 如何在 Hibernate 中通过第三个实体将一个实体连接到第二个实体?

hibernate - 如何仅删除前 100 行?

java - Jenkins WAR 文件未在 Tomcat 上部署 - 缺少主目录?