使用 JDBC 将 Microsoft Access 数据库连接到 Java 并编译
对于学校数据库项目,我们正在制作一个数据库程序(用户 GUI 和数据库)。我使用 Microsoft Access 2010 创建了数据库并填充了一些示例数据,并将其保存为 .mdb 格式并将其放置在我的项目文件夹中。
当在 Eclipse 中运行它时,以下代码工作正常,连接甚至检索查询。但是我发现我无法将代码导出到 jar 并运行它(这是项目所必需的,请在 CD 或闪存驱动器上为他们提供程序的工作副本),而且我也无法移植将代码转移到 Netbeans 以使其正常工作,并尝试在 Linux 计算机上进行编译。
我认为这是包含驱动程序或尝试使用 Microsoft 访问的问题。代码下面给出了运行 jar 或在 Netbeans 上运行时遇到的错误。所以我问如何包含驱动程序以使程序可移植,或者我还能如何解决这个问题?
预先感谢
import java.sql.*;
public class JDBCTest {
static Connection connection;
static Statement statement;
public static void main(String args[]){
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=TLDATABASEDBM.mdb";
connection = DriverManager.getConnection( database ,"","");
buildStatement();
executeQuery();
}catch(Exception e){
e.printStackTrace();
System.out.println("Error!");
}
}
public static void buildStatement() throws SQLException {
statement = connection.createStatement();
}
public static void executeQuery() throws SQLException {
boolean foundResults = statement.execute("SELECT * FROM tblStaff AS x WHERE City='Calgary'");
if(foundResults){
ResultSet set = statement.getResultSet();
if(set!=null) displayResults(set);
}else {
connection.close();
}
}
public static void displayResults(ResultSet rs) throws SQLException {
ResultSetMetaData metaData = rs.getMetaData();
int columns=metaData.getColumnCount();
String text="";
while(rs.next()){
for(int i=1;i<=columns;++i) {
text+=""+metaData.getColumnName(i)+":\t";
text+=rs.getString(i);
//text+="</"+metaData.getColumnName(i)+">";
text+="\n";
}
text+="\n";
}
System.out.println(text);
}
}
上面提到的错误:
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957) at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114) at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3073) at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323) at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174) at java.sql.DriverManager.getConnection(DriverManager.java:582) at java.sql.DriverManager.getConnection(DriverManager.java:207) at tldatabase.DataConnect.makeConnection(DataConnect.java:35) at tldatabase.Main.main(Main.java:24)
for a school database project we are making a database program (user GUI and the database). Using Microsoft Access 2010 I created the database and populated it with some sample data, and saved it in .mdb format and placed it in my project folder.
When running it in eclipse the following code works fine, connects and even retrieves the query. However I find that I am unable to export the code to a jar and run it (which is required for the project, give them a working copy of your program on a CD or flash drive), and I'm also unable to port the code over to Netbeans to have it work, as well as trying to compile on a Linux machine.
I assume this is a problem with including drivers or trying to use Microsoft access. The error I get when running the jar or running on Netbeans is given below the code. So I ask either how do I include drivers to make the program portable, or how else can I approach this problem?
Thanks in advance
import java.sql.*;
public class JDBCTest {
static Connection connection;
static Statement statement;
public static void main(String args[]){
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=TLDATABASEDBM.mdb";
connection = DriverManager.getConnection( database ,"","");
buildStatement();
executeQuery();
}catch(Exception e){
e.printStackTrace();
System.out.println("Error!");
}
}
public static void buildStatement() throws SQLException {
statement = connection.createStatement();
}
public static void executeQuery() throws SQLException {
boolean foundResults = statement.execute("SELECT * FROM tblStaff AS x WHERE City='Calgary'");
if(foundResults){
ResultSet set = statement.getResultSet();
if(set!=null) displayResults(set);
}else {
connection.close();
}
}
public static void displayResults(ResultSet rs) throws SQLException {
ResultSetMetaData metaData = rs.getMetaData();
int columns=metaData.getColumnCount();
String text="";
while(rs.next()){
for(int i=1;i<=columns;++i) {
text+=""+metaData.getColumnName(i)+":\t";
text+=rs.getString(i);
//text+="</"+metaData.getColumnName(i)+">";
text+="\n";
}
text+="\n";
}
System.out.println(text);
}
}
The error mentioned above:
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957) at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114) at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3073) at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323) at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174) at java.sql.DriverManager.getConnection(DriverManager.java:582) at java.sql.DriverManager.getConnection(DriverManager.java:207) at tldatabase.DataConnect.makeConnection(DataConnect.java:35) at tldatabase.Main.main(Main.java:24)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我知道这篇文章是几年前的事了,但我想为那些现在才经历过这种情况的人回答这个问题。我花了一段时间才知道问题的答案,所以这里是解决方案:
http://wiki.netbeans.org/FaqSettingHeapSize
按照“运行 32 位 JVM”进行操作。
您所要做的就是在 netbeans 的安装文件夹中找到 netbeans.conf 并将目录从这样的目录更改:
netbeans_jdkhome="C:\Program Files\Java\jdk1.6.0_24"
更改为:
netbeans_jdkhome="C :\Program Files (x86)\Java\jdk1.6.0_21"
问题是 netbeans 可能在 64 位中运行,但 MS Access 仅支持 32 位。因此,这样做有望解决问题。另请确保安装此:
http://www.microsoft.com/download /en/details.aspx?displaylang=en&id=23734
I know the post was years ago but I felt like answering the question for those who are just experiencing this right now. It took me a while to know the answer to the question so here's the solution:
http://wiki.netbeans.org/FaqSettingHeapSize
Follow the "Running the 32-bit JVM".
All you have to do is find the netbeans.conf in the installation folder of your netbeans and change the directory from something like this:
netbeans_jdkhome="C:\Program Files\Java\jdk1.6.0_24"
to this:
netbeans_jdkhome="C:\Program Files (x86)\Java\jdk1.6.0_21"
The problem is netbeans might be running in 64 bit but MS Access only support 32-bit. So doing this would hopefully solve the problem. Also make sure to install this:
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23734
主要问题在于:
另外,如果您想每次都使用相同的 DSN,最好将 DSN(数据源名称)添加到存储 mdb 的相应系统中。
The main problem lies in the line:
Also, if you want to use the same DSN every time, it is better to add the DSN(Data Source Name) into the respective system on which the mdb is stored.
我认为您的应用程序在当前目录中看不到
TLDATABASEDBM.mdb
。您可以在连接字符串中提供此文件的完整路径,或在 ODBC 管理器中添加系统 DSN,然后使用连接字符串连接到它,例如:jdbc:odbc:TLDATABASEDBM
I think that your app do not see
TLDATABASEDBM.mdb
in current directory. You can give full path to this file in connection string or add system DSN in ODBC Manager and then connect to it with connection string like:jdbc:odbc:TLDATABASEDBM
老实说,我不喜欢我要说的话...但是,它为我解决了同样的问题...神秘地...:(((
在定义数据库变量的行上,我改变了... (.mdb)... 到 ...(.mdb, *.accdb)...
祝您找出其中的差异!
Honestly, I dont like what I am going to say... but, it solved the same issue for me... mysteriously... :(((
on the line where you are defining the database variable, I changed ...(.mdb)... into ...(.mdb, *.accdb)...
All the best for figuring out what difference that made!