java.sql.SQLException:[Microsoft] [ODBC Microsoft Access驱动程序]无法更新。数据库或对象是只读的

时间:2012-08-09 15:11:19

标签: java spring hibernate ms-access

我使用的是Spring 3.1.2和Hibernate 4.1.5_SP1。我正在尝试将CS​​V文件导入动态创建的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.

我的数据源网址类似于:

jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\somePath\myAccessFile.accdb

我检查了文件并且它们不是只读的。关于如何解决这个问题的任何建议?

谢谢!

1 个答案:

答案 0 :(得分: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]