各位大哥帮帮忙关于"Microsoft Jet 数据库引擎打不开文件'(未知的)'"

solomonboy 2010-01-14 01:54:02
一个很奇怪的问题,在myeclipse中可以获取到服务器的连接,把程序打包成windows的服务后,启动测试程序也可以拿到数据库的连接,但是放到服务里面启动,则出现获取数据库连接失败的问题。以前类似的情况也遇到过,是在tomcat中,把web项目在tomcat中部署,用myeclipse中的tomcat启动连接数据库没问题,把发布后的程序拷到服务器上,在用服务形式启动tomcat则连接数据库异常(数据库才用access,因开发需要)。
这个问题一直困扰着我,望高手赐教...从网上搜来些解决方案,大多数都说目录权限问题,按照其解决方案也没有解决。
下面我把简化的代码和日志贴一下:

连接数据库代码:

public static Connection getConn2() throws Exception{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=\\\\192.168.1.81\\edisonServer\\edison-gw.mdb";
conn = DriverManager.getConnection(url,"Administrator","37734278");
log.info("连接到服务器数据库成功");
}catch(Exception e){
log.error("连接到服务器数据库失败");
throw new Exception(e);
}
return conn;
}

连接的是服务器上面ACCESS数据库,采用JDBC共享方式连接,测试代码无误,可以拿到连接。
-------------------------------------------------
下面是程序打包后测试的日志:

2010-01-14 13:53:06 com.novasky.companySMS.secondController.db.DBConnection.getConn(DBConnection.java:38)
INFO 连接到服务器192.168.1.77数据库成功
2010-01-14 13:53:09 com.novasky.companySMS.secondController.db.DBConnection.getConn(DBConnection.java:38)
INFO 连接到服务器192.168.1.81数据库成功

测试无误,可以启动,连接也拿得到。。。。。。

---------------------------------------------------
最后是从服务里面启动程序后出现的日志:


2010-01-14 13:41:00 com.novasky.companySMS.secondController.db.DBConnection.getConn(DBConnection.java:38)
INFO 连接到服务器192.168.1.77数据库成功
2010-01-14 13:41:00 com.novasky.companySMS.secondController.db.DBConnection.getConn(DBConnection.java:40)
ERROR 连接到服务器192.168.1.81数据库失败
2010-01-14 13:41:00 com.novasky.companySMS.secondController.controller.Controller.<clinit>(Controller.java:43)
ERROR 连接池出现异常
java.lang.Exception: java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Microsoft Jet 数据库引擎打不开文件'(未知的)'。 它已经被别的用户以独占方式打开,或没有查看数据的权限。
at com.novasky.companySMS.secondController.db.DBConnection.getConn(DBConnection.java:41)
at com.novasky.companySMS.secondController.db.ConnectionPool.<init>(ConnectionPool.java:41)
at com.novasky.companySMS.secondController.controller.Controller.<clinit>(Controller.java:38)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.tanukisoftware.wrapper.WrapperSimpleApp.<init>(WrapperSimpleApp.java:147)
at org.tanukisoftware.wrapper.WrapperSimpleApp.main(WrapperSimpleApp.java:485)
Caused by: java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Microsoft Jet 数据库引擎打不开文件'(未知的)'。 它已经被别的用户以独占方式打开,或没有查看数据的权限。
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.novasky.companySMS.secondController.db.DBConnection.getConn(DBConnection.java:37)
... 6 more
2010-01-14 13:41:01 com.novasky.companySMS.secondController.communication.NodeClient.<init>(NodeClient.java:82)

此时连接数据库只能连接本地的,服务器上的连接则拿不到,出现Microsoft Jet 数据库引擎打不开文件'(未知的)'。 它已经被别的用户以独占方式打开,或没有查看数据的权限错误。

望高手指教!!!
...全文
4007 31 打赏 收藏 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
HUXINLINCOLN 2011-05-18
  • 打赏
  • 举报
回复
哇 清华大学的Novasky系统
lx54357261 2011-01-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 huntor 的回复:]
http://zhidao.baidu.com/question/41367282.html
把系统下的\Windows\Temp文件夹权限添加everyone!给他写入和修改的权限!!!
就可以了!

应该类似
[/Quote]
正解,刚解决了这个问题
zhujjcn 2010-11-29
  • 打赏
  • 举报
回复
这个问题解决了么,碰到了同样的问题
小灰狼 2010-09-17
  • 打赏
  • 举报
回复
楼主的 access 文件为什么是 \\ 的方式,难道 access 文件是放在另一台机器上的吗

BTW:
Class.forName(.....) 方法对整个系统而言,只需要执行一次就可以了,所以建议放到静态块中
茶五蛋 2010-09-17
  • 打赏
  • 举报
回复
HDR=Yes;IMEX=1

打开数据库时加入
shen124572460 2010-08-13
  • 打赏
  • 举报
回复
把系统下的\Windows\Temp文件夹权限添加everyone!给他写入和修改的权限!!!
就可以了!
solomonboy 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 scelong 的回复:]
在window的系统要在控制面板下的管理工具数据源下的进行数据库的配置,才可以连接,为什么,因为你连的是微软的,再又为什么呢,因为没有jar包,不能通过JDBC方式来启动数据库驱动程序
[/Quote]

哈哈~还是一样地...和JDBC一样,没打服务前测试连接能够拿到,打成服务就不行了..
solomonboy 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 ofacop 的回复:]
Access数据库以共享方式打开时,可以保证多人能够同时使用同一个数据库。而以独占的方式打开时,只有系统管理员才能访问数据库。而在本地测试时使用的就是管理员用户打开的,但上传到服务器上后,再访问显然没有管理员的权限,所以要取消Access的独占方式!!查看Access中的一下配置以解除独占方式:
1.在“工具”菜单中,单击“选项”命令。   2.单击“高级”选项,在“默认打开模式”下,单击“共享”。   3.单击“确定”按钮。
试一下,行不行都回复我们啊,不行大家会继续给你想办法!
[/Quote]
原来设置里面就已经是共享方式打开了...显然是不行的!
solomonboy 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 scelong 的回复:]
在window的系统要在控制面板下的管理工具数据源下的进行数据库的配置,才可以连接,为什么,因为你连的是微软的,再又为什么呢,因为没有jar包,不能通过JDBC方式来启动数据库驱动程序
[/Quote]

我汗....不建数据源还不行了...待我试试看咯...
scelong 2010-01-21
  • 打赏
  • 举报
回复
在window的系统要在控制面板下的管理工具数据源下的进行数据库的配置,才可以连接,为什么,因为你连的是微软的,再又为什么呢,因为没有jar包,不能通过JDBC方式来启动数据库驱动程序
ofacop 2010-01-21
  • 打赏
  • 举报
回复
没嘴儿我们要期待Microsoft来解决了,哈哈,不知道是不是个BUG!
solomonboy 2010-01-21
  • 打赏
  • 举报
回复
刚刚试了一下,还是不行,谢谢ofacop,期待我们能够解决这个问题~
ofacop 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 solomonboy 的回复:]
引用 18 楼 ofacop 的回复:
Access数据库以共享方式打开时,可以保证多人能够同时使用同一个数据库。而以独占的方式打开时,只有系统管理员才能访问数据库。而在本地测试时使用的就是管理员用户打开的,但上传到服务器上后,再访问显然没有管理员的权限,所以要取消Access的独占方式!!查看Access中的一下配置以解除独占方式:
1.在“工具”菜单中,单击“选项”命令。   2.单击“高级”选项,在“默认打开模式”下,单击“共享”。   3.单击“确定”按钮。
试一下,行不行都回复我们啊,不行大家会继续给你想办法!

原来设置里面就已经是共享方式打开了...显然是不行的!
[/Quote]
在设置为共享方式的情况下,还是有可能以独占方式打开!
修改连接字符串为:DBQ=\\\\192.168.1.81\\edisonServer\\edison-gw.mdb;ExtendedAnsiSQL=1
ofacop 2010-01-19
  • 打赏
  • 举报
回复

Access数据库以共享方式打开时,可以保证多人能够同时使用同一个数据库。而以独占的方式打开时,只有系统管理员才能访问数据库。而在本地测试时使用的就是管理员用户打开的,但上传到服务器上后,再访问显然没有管理员的权限,所以要取消Access的独占方式!!查看Access中的一下配置以解除独占方式:
1.在“工具”菜单中,单击“选项”命令。   2.单击“高级”选项,在“默认打开模式”下,单击“共享”。   3.单击“确定”按钮。
试一下,行不行都回复我们啊,不行大家会继续给你想办法!
ofacop 2010-01-18
  • 打赏
  • 举报
回复
有没有在服务器的ODBC源中注册该链接资源啊?不注册Windows不鸟你的呵呵!
focusforce 2010-01-18
  • 打赏
  • 举报
回复
http://hi.baidu.com/ycosxhack/blog/item/1abf43f0ef45cbaea40f5291.html
看看这篇文章对你是否有帮助。
偶用JDBC连接access的时候也碰到一些奇怪的问题,比如编码、PS未关闭等,但没用过你这种场景。
solomonboy 2010-01-18
  • 打赏
  • 举报
回复
各位老大们。难道这个问题就没人解决么...
solomonboy 2010-01-18
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 ofacop 的回复:]
有没有在服务器的ODBC源中注册该链接资源啊?不注册Windows不鸟你的呵呵!
[/Quote]
用的是JDBC连接啊,又如何去设置ODBC中注册链接资源呢?为和程序里面连接可以,到服务里面又不行呢?请大哥指点
solomonboy 2010-01-18
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 ofacop 的回复:]
有没有在服务器的ODBC源中注册该链接资源啊?不注册Windows不鸟你的呵呵!
[/Quote]
多谢大哥指点,我看看设置后如何。
qqbz 2010-01-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 solomonboy 的回复:]
引用 10 楼 qqbz 的回复:
本人曾经遇到类似的的问题。
很不幸的是,没有解决。后来使用通常的启动程序办法。

谢谢楼上的各位,对于8楼的情况,我敢保证没有程序使用该数据库。问题是为什么测试的时候正常,放到服务里面启动却出问题呢?

通常的启动程序办法怎么启动?不可能每次你用到该程序的时候手动去点击bat文件启动吧
[/Quote]

您说得非常对,手动启动。
另这不仅仅是java的问题,使用其他编程语言,也遇到一样的问题。因此怀疑是server中不能访问数据库。
#14楼:
如果不注册,在任何情况下都不能访问的,现在只是在服务中不能访问。
加载更多回复(11)

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧