2012-01-05 38 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語句成功...