学校のデータベースプロジェクトでは、データベースプログラム(ユーザー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]データソース名が見つからず、デフォルトのドライバーが指定されていません 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) 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)
投稿が数年前だったことは知っていますが、今これを経験しているだけの人のために質問に答えたいと思いました。質問への答えを知るのにしばらく時間がかかったので、ここに解決策があります:
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
主な問題は次の行にあります。
String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=TLDATABASEDBM.mdb";
また、毎回同じDSNを使用する場合は、mdbが格納されているそれぞれのシステムにDSN(データソース名)を追加することをお勧めします。
あなたのアプリは現在のディレクトリにTLDATABASEDBM.mdb
を表示していないと思います。このファイルへのフルパスを接続文字列で指定するか、システムDSNをODBC Managerに追加して、次のような接続文字列でそれに接続します。jdbc:odbc:TLDATABASEDBM
package javaapplication1;
import Java.sql.*;
public class MSaccess_archive {
public static void main(String[] args) {
try {
Class.forName("Sun.jdbc.odbc.JdbcOdbcDriver");
// set this to a MS Access DB you have on your machine
String filename = "mdbTEST.mdb";
String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";
database+= filename.trim() + ";DriverID=22;}"; // add on to the end
// now we can get the connection from the DriverManager
Connection con = DriverManager.getConnection( database ,"","");
Statement stmt = con.createStatement();
stmt.execute("select * from student"); // execute query in table student
ResultSet rs = stmt.getResultSet(); // get any Result that came from our query
if (rs != null)
while ( rs.next() ){
System.out.println("Name: " + rs.getInt("Age") + " ID: "+rs.getString("Course"));
}
stmt.close();
con.close();
}
catch (Exception err) {
System.out.println("ERROR: " + err);
}
}
}
正直言って、これから言うことは好きではありません...しかし、同じ問題が解決しました...不思議なことに...:(((
データベース変数を定義している行で、...(。mdb)...を...(。mdb、* .accdb)...に変更しました.
どんな違いがあったのかを理解するのに最高です!