2012-04-30 12 views
2

私は学校で基本的なSQLのテストのために勉強しようとしているが、残念ながら、私たちは私のPC上のプロジェクトに使用することになっていると、私は次のエラーを取得していたクラスをコピー:MSアクセスjdbc.odbc接続。データソース名が見つかりません/デフォルトドライバが指定されていませんか?

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

package Question1; 

// Your name, Q 1 
import java.sql.*; 
import java.io.*; 
import javax.swing.*; 

public class GreenWood 
{ 
// Set up database connection 
    private static final String DATABASE_FILE_NAME = "WoodDB.mdb"; 
    private static final String DRIVER = "jdbc:odbc:DRIVER=" + 
    "{Microsoft Access Driver (*.mdb)};" + 
    "DBQ=" + new File (DATABASE_FILE_NAME).getAbsolutePath(); 
    static 
    { 
    try 
    { 
     Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver"); 
    } 
     catch (ClassNotFoundException e) 
     { 
      System.out.println ("Class not found"); 
      e.printStackTrace(); 
     } 
    } 


    private Connection dbcon; 
    private BufferedReader keyb = new BufferedReader (new InputStreamReader (System.in)); 

    public GreenWood() 
    { 
    System.out.println ("WoodDB Connection"); 
    try 
    { 
     dbcon = DriverManager.getConnection (DRIVER); 
     Statement stmt = dbcon.createStatement(); 
     System.out.println ("Connection successful\n"); 

     char choice = ' '; 
     do 
     { 

     //Prints options for user input 

      choice = keyb.readLine().toUpperCase().charAt (0); 
      System.out.println (" "); 
      switch (choice) 
      { 
      //calls query methods based on user input 

      } 
     } 
     while (choice != 'X'); 
     dbcon.close(); 
     System.out.println ("Done"); 
     Thread.sleep (1000); 
     System.exit (0); 
    } // try 
     catch (Exception e) 
     { 
     // process exceptions here 
      System.out.println ("Connection unsuccessful"); 
      e.printStackTrace(); 
      System.out.println (e.toString()); 
     } 
    } // HoutSoorte constructor 

    //Query Methods 
    //Main creates new instance of GreenWood 

私のWoodDBデータベースは、ルートプロジェクトディレクトリにあります。

私はいくつかのトラブルシューティングを行いましたが、問題はドライバの場所のURLと思われます。

dbcon = DriverManager.getConnection (DRIVER); 

DRIVERのビーイング:

private static final String DRIVER = "jdbc:odbc:DRIVER=" + 
    "{Microsoft Access Driver (*.mdb)};" + 
    "DBQ=" + new File (DATABASE_FILE_NAME).getAbsolutePath(); 

私はまだ私があったように同じように混乱している研究の程度時間後。 誰かがこのナブ・プログラマー(私)の問題をベビー・ワードで説明し、それをどのように修正できるかを助けることができれば、それはいつも感謝しています。

+0

[タグ:宿題のタグを宿題に追加することを忘れないでください!私はそれが 'ms-access-2000'よりもずっと多くの信者を持っていると思います。 –

+0

* "私は自分のPC上のプロジェクトに使用するクラスをコピーしました" * DBとDBドライバもコピーしましたか?通常、ドライバはJar内にあり、アプリケーションのランタイムクラスパスに追加する必要があります。 –

+0

Andrewに返信してくれてありがとう。私は、JDBC/ODBCドライバはデフォルトでJDKに含まれていると信じています。 –

答えて

3

32ビットJVMを使用してみてください。 64ビットJVMから接続しようとすると、同じエラーメッセージが表示されます。

+0

それは動作します!ありがとう!私がAndrewに言ったように、以前のodbcはJDKにデフォルトで含まれていますが、32bit版しかありません。 jvmの変更は偉大な(永久的な)解決策ではありませんが、ODBCは時代遅れであり、完全に必要でない限り使用しないでください(残念なことに学校の学生の場合のように) –

+1

私は最近、まだ提案されている解決策を試す時間がありませんでした。とにかく、あなたが興味がある場合には、見てください:http://stackoverflow.com/questions/10289655/how-to-connect-to-a-32-bit-access-database-from-64-bit-jvm。 – Pedro

0

DATABASE_FILEのフルパス名を使用するか、ソースディレクトリにコピーしてみます。

+0

同じことが、file.getAbsolutePath()の使用によって達成されたわけではありません。 ? –

+0

おそらく、ファイルオブジェクトがファイルを最初に見つけることができるはずです。それから、 'getAbsolutePath()'が機能するはずです。 – user1335794

+0

私は私の誤解を感謝します。 –

3

それが動作するかどうか、以下を試してみてください。

を64ビットシステム、後藤の場合:C:\ WINDOWS \ SYSWOW64。 32ビットシステムの場合、C:¥windows

実行可能ファイルodbcad32.exeがあります。

接続CON =のDriverManager:

ランなどのMicrosoft Officeに付属するすべてのODBCドライバにアクセスするには、管理者としてこのexeファイル、

は、接続文字列をmy_data_sourceという名前のデータ・ソースを作成して言及。 getConnection( "jdbc:odbc:my_data_source");

私の場合、上記の溶液が機能しました。

詳しくは、Java Connectivity with MS Access を参照してください。

関連する問題