如何使用java访问odbc数据库?

时间:2012-01-05 13:40:29

标签: java ms-access odbc

实际上我正在开发一个需要ODBC的Java应用程序 我创建了数据库ms Access并且类连接正在工作,但是当我尝试在数据库中添加表时,会出现异常:

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)

数据库处于只读模式。

如何设置数据库读写?

5 个答案:

答案 0 :(得分:2)

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

请记住,在设置dsn时,将readonly设置为0。

以下是有关如何使用带有MS Access的JDBC-ODBC(未完成)的示例

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

正如杰尔所说,一些司机需要明确定义&在这种情况下可能是ReadOnly = False,有些驱动程序需要密码来编辑数据库。

问候

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

如果您共享用于连接数据库的代码,那么弄清楚您做错了什么会更容易。 使用this链接进行问题排查

答案 4 :(得分:1)

尝试查看Access ODBC数据源的“高级”配置选项。

你应该找到一个“ReadOnly”选项......

使用Microsoft 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语句成功...