2012-01-05 33 views
0

其实我正在研究一个需要ODBC的Java应用程序。
我创建的数据库MS Access和类连接工作,但是当我尝试在数据库中添加一个表出现异常:如何使用java访问odbc数据库?

java.sql.SQLException: [Microsoft][Pilote ODBC Microsoft Access] Impossible de modifier la structure de la table ??personne??. La base de donn?es est en lecture seule. 
    at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6956) 
    at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7113) 
    at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3109) 
    at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:337) 
    at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:252) 
    at inventaire.NewClass1.main(NewClass1.java:28) 

该数据库是只读模式。

如何设置数据库读写?

+0

更多细节将会是很有用,就像您使用的驱动程序以及连接字符串的样子。但是,http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=2691&lngWId=2包含创建表的示例。 – 2012-01-05 13:50:38

回答

2

尽可能避免使用ODBC-JDBC桥接。

记住,在设置DSN,设置只读0

继承人如何与JDBC-ODBC与MS访问工作(其未完成)为例

http://www.mundayweb.com/progs/jdbc-odbc-tut.php

的驱动程序列表:

http://devapp.sun.com/product/jdbc/drivers/search_results.jsp?jdbc_version=0&vendor_name=&cert_mode=and&jdbc_driver_type_mode=and&dbms=6&dbms_mode=and&features_mode=and&results_per_page=20&submit=Search

由于杰尔表示,一些司机需要明确DEF在这种情况下,&可能是ReadOnly = False,有些驱动程序需要密码才能编辑数据库。

关于

+0

我做了所有这一切,我仍然有一个例外: – 2012-01-05 14:43:28

1

尝试将"ReadOnly=False;"添加到连接字符串中。你确定你有写权限的数据库文件?如果ReadOnly设置为0,还要检查odbc dsn中的高级选项。

1

为了从您的java应用程序连接到访问数据库,您应该使用本地odbc桥接器。转到您的控制面板 - >管理工具 - > ODBC数据源,然后在那里添加您的访问文件

+0

我做了所有这些,我仍然得到相同的例外:dababase处于只读模式。 – 2012-01-05 14:50:52

1

如果您分享您用于连接数据库的代码,那么判断您做错了什么会更容易。 使用this链接进行故障排除

1

尝试在您的“高级”配置选项中查找Access ODBC数据源。

在那里,你应该找一个“只读”选项...

使用微软odbctest此选项进行实验给出了 -

With: ReadOnly = 1 

SQLExecDirect: 
    In: hstmt = 0x00613250, 
     szSqlStr = "create table test1 (c1 integer)", cbSqlStr = -3 
    Return: SQL_ERROR=-1 
    stmt: szSqlState = "42000", *pfNativeError = -1809, *pcbErrorMsg = 116, *ColumnNumber = -2, *RowNumber = -2 
    MessageText = "[Microsoft][ODBC Microsoft Access Driver] Cannot modify the design of table 'test1'. It is in a read-only database." 

这是你所得到的同样的错误......

With: ReadOnly = 0 

SQLExecDirect: 
    In: hstmt = 0x00613288, 
     szSqlStr = "create table test1 (c1 integer)", cbSqlStr = -3 
    Return: SQL_SUCCESS=0 

SQL_SUCCESS表示DDL语句成功...