无法连接到MS Access数据库

时间:2013-05-01 20:43:03

标签: java sql ms-access ms-access-2010 jdbc-odbc

这是我的代码:

public class ConnectDB {
Connection conn;
Scanner kb=new Scanner(System.in);
public String ID;
public ConnectDB()
{
try
     {
        Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
        System.out.println ("Driver successfully loaded");
     }
         catch (ClassNotFoundException c)
        {
           System.out.println ("Unable to load database driver");
        }

  //connect to the database
     try
     {
    String filename = "PATPhase2DB.mdb";
    String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb,*.accdb)};DBQ=";
    database += filename.trim () + ";DriverID=22;READONLY=true}";
    conn = DriverManager.getConnection (database,"","");
    System.out.println ("Connection to database successfully established");

     }
     catch (Exception e)
     {
         System.out.println ("Unable to connect to the database");
     }
}

消息是:
司机成功加载
无法连接到数据库
显示java.lang.NullPointerException

这与我的计算机不同,通过完全相同的代码连接到数据库。我也在运行Windows 8。

4 个答案:

答案 0 :(得分:3)

这是非常常见的错误。

原因是some other application is using your database(最常见的是您在Microsoft Access中打开了数据库)。

关闭它并享受。

编辑:
这个答案是针对评论中提到的错误用户(无法打开注册表项'临时(易变)

答案 1 :(得分:0)

将此添加到您的代码中:

System.out.println ("Unable to connect to the database");
System.out.println ("Exception: " + e.getMessage());

然后你可以更深入地了解出了什么问题

答案 2 :(得分:0)

您的Driver=名称缺少空格。你已将其定义为......

Driver={Microsoft Access Driver (*.mdb,*.accdb)};

......但应该是......

Driver={Microsoft Access Driver (*.mdb, *.accdb)};

你的连接字符串末尾也有一个迷路},但这似乎没有伤害任何东西。

答案 3 :(得分:0)

在这种情况下,您需要提及访问数据库文件的完整路径,并且扩展名(.mdb, *.accdb)空间之间的URL是强制性的,例如:

String database="C:/Users/GIRI/Desktop/fdsfkdsfj/abc.accdb";
String url="jdbc:odbc:Driver={Microsoft Access Driver (.mdb, *.accdb)};DBQ=" + database + ";DriverID=22;READONLY=true";