Moo*_*gle 9 java ms-access database-connection jdbc executable-jar
对于学校数据库项目,我们正在制作数据库程序(用户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);
}
}
Run Code Online (Sandbox Code Playgroud)
上面提到的错误:
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)
Dar*_*win 10
我知道这篇文章是几年前的事情,但我觉得现在正在为那些正在体验这个问题的人回答这个问题.我花了一段时间才知道问题的答案,所以这是解决方案:
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
TLDATABASEDBM.mdb我认为您的应用程序在当前目录中看不到。您可以在连接字符串中提供此文件的完整路径,或在 ODBC 管理器中添加系统 DSN,然后使用连接字符串连接到它,如下所示:jdbc:odbc:TLDATABASEDBM