在Java中为MS Access创建无DSN连接
我正在构建需要与MS Access数据库通信的桌面应用程序。现在,除非我想在每台将要使用桌面应用程序的计算机上注册数据库的DSN,否则我需要一种以无DSN的方式连接到数据库的方式。在Java中为MS Access创建无DSN连接
我搜索了很多,发现一些有用的链接how to create connection strings,并基于此,我尝试修改我的程序,但没有成功。 下面的代码失败。如果我将getConnection中的字符串切换为“jdbc:odbc:sampleDB”,它可以工作,但这是使用DSN而不是我想实现的。
如何在java中编写和使用连接字符串以建立与MS Access数据库的无DSN连接?
private Connection setupConnection() throws ClassNotFoundException,
SQLException {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("Driver={Microsoft Access Driver (*.mdb)} &_ Dbq=c:\\as\\sampleDB.mdb");
return con;
}
增加:我也想指出,如果任何人有办法达到我要求与一个DSN-方面,我会很乐意听它的主意!
jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:\\Nwind.mdb
所以用搜索:
JDBC连接字符串shouls与jdbc:
像开始jdbc:odbc:[alias]
,例如:
Connection con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=c:\\as\\sampleDB.mdb");
如果配置DSN然后你使用simplier连接字符串可以连接到它:
jdbc:odbc:northwind
我也有这个问题,并尝试过男人y这里和各种论坛的建议。最后,我从一个地方发现了一个导致成功连接的片段,并解释了为什么很多这些帖子不起作用。请参阅http://www.coderanch.com/t/295299/JDBC/databases/jdbc-odbc-DSN-connection-MS
问题是在odbc末尾冒号后面必须有一个分号,如在jdbc中:odbc:; Driver =。在阅读JdbcOdbc桥接器上的Oracle文档后,说明语法为jdbc:odbc:dsn;属性.......由于我们不提供DSN,所以我们需要结束;在添加属性之前。
我显示我用不同的连接字符串跑了Windows 7旗舰版32位机器上测试以下:
driver= (Driver)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
//jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ= does lookup to ODBC.ini to find matching driver
try {
connstr= "jdbc:odbc:;Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + fileURI; //64 bit ?? (*.mdb,*.accdb)
conn= DriverManager.getConnection(connstr, "", "");
stmt= conn.createStatement();
}
catch (Exception e){}
try {
connstr= "jdbc:odbc:;Driver={Microsoft Access Driver (*.mdb)};DBQ=" + fileURI; //64 bit ?? (*.mdb,*.accdb)
conn1= DriverManager.getConnection(connstr, "", "");
stmt1= conn1.createStatement();
dbmeta1=conn1.getMetaData();
}
catch (Exception e){}
try {
connstr= "jdbc:odbc:MS Access Database;DBQ=" + fileURI; //64 bit ?? (*.mdb,*.accdb)
conn2= DriverManager.getConnection(connstr, "", "");
stmt2= conn2.createStatement();
dbmeta2=conn2.getMetaData();
}
catch (Exception e){}
try {
connstr= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + fileURI; //64 bit ?? (*.mdb,*.accdb)
conn3= DriverManager.getConnection(connstr, "", "");
stmt3= conn3.createStatement();
dbmeta3=conn3.getMetaData();
}
catch (Exception e){}
stmt1和stmt3是空的,因为连接是空。 stmt和stmt2工作。 stmt2使用我在IBM Tivoli的文档中找到的连接字符串。它的工作原理是因为“MS Access数据库”是ODBC注册表中作为我的计算机上的用户DSN的有效标题。
工作就像一个魅力。非常感谢! – 2011-02-16 13:56:01
也适用于[h2数据库链接表](http://www.h2database.com/html/grammar.html#create_linked_table)。 – transistor1 2012-12-04 15:08:51