2010-12-01 6 views
9

을 컴파일하여 데이터베이스 프로그램 (사용자 GUI 및 데이터베이스)을 만들고 있습니다. Microsoft Access 2010을 사용하여 데이터베이스를 만들고 샘플 데이터를 채우고 .mdb 형식으로 저장 한 다음 프로젝트 폴더에 저장했습니다.JDBC를 사용하여 Microsoft Access 데이터베이스를 Java에 연결하고 학교 데이터베이스 프로젝트에

이클립스에서 실행할 때 다음 코드는 잘 작동하고 쿼리를 연결하고 검색합니다. 그러나 코드를 jar 파일로 내보내고 실행할 수 없다는 것을 알았습니다 (프로젝트에 필요합니다. CD 또는 플래시 드라이브에 프로그램의 작업 복사본을 제공하십시오). Netbeans에서 작동하도록 코드를 작성하고 Linux 컴퓨터에서 컴파일하려고합니다.

나는 이것이 드라이버를 포함하거나 Microsoft 액세스를 사용하는 데 문제가 있다고 가정합니다. 항아리를 실행하거나 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) 

답변

0

내가 앱이 현재 디렉토리에 TLDATABASEDBM.mdb 표시되지 않는 것이라고 생각합니다. 연결 문자열에서이 파일의 전체 경로를 지정하거나 ODBC 관리자에서 시스템 DSN을 추가 한 다음 다음과 같은 연결 문자열을 사용하여 연결할 수 있습니다. jdbc:odbc:TLDATABASEDBM

+0

파일의 경로가 올바르지 않으면 "데이터 원본 이름을 찾을 수없고 기본 드라이버가 지정되지 않았습니다."오류가 아닌 알 수없는 파일 오류를 열 수 있습니다. 내가 전체 데이터베이스 프로그램을 패키지화하고 교사에게 실행할 필요가 있기 때문에 DSN을 사용할 수 있는지, 항아리 작업을 할 수 있는지 확실하지 않습니다. 이전에 DSN 경로를 사용하려고 시도했지만 문제가 발생했습니다. 다시 시도하고 데모 용으로 TA를 제공 할 때 프로그램을 실행하도록 읽을 수 있는지 물어 봅니다. 그래도 도움을 주셔서 감사합니다. – Moogle

+0

좋아, jar 파일로 DSN과 함께 작동합니다. 내 유일한 질문은 지금은 창문이 Windows 액세스 파일에 연결하는 드라이버를 가지고 있기 때문에 그들이 아닌 Windows 컴퓨터에서 프로그램을 실행하면 작동하지 않을까요? 그리고 나는 다른 방법으로 ms 액세스 .mdb 파일을 java를 사용하여 연결할 수 있다고 가정합니까? 감사! – Moogle

+0

Jython을 사용하여 Northwind Access 데이터베이스에서 테스트했습니다. 전체 .mdb 파일 이름과 DSN이 포함 된 연결 문자열로 작업했습니다. Java에서'Class.forName()'다음에'newInstance()'를 추가해야하는지 잘 모르겠습니다. 자바 6에서는'Class.forName()'을 호출 할 필요가 없다. http://onjava.com/pub/a/onjava/2006/08/02/jjdbc-4-enhancements-in-java-se-6.html을 살펴보십시오. –

10

나는이 게시물이 수년 전 이었지만 그 사람에 대한 질문에 대답하는 것을 느꼈습니다. 지금이 순간을 경험하고 있습니다. 그래서 여기에 질문에 대한 답을 알고 걸 렸어요 솔루션의 :

http://wiki.netbeans.org/FaqSettingHeapSize

이 따릅니다 "32 비트 JVM을 실행"을 참조하십시오.

당신이 당신의 넷빈즈의 설치 폴더에 netbeans.conf를 찾아이 같은에서 디렉토리를 변경하기 만하면됩니다 :

netbeans_jdkhome = "C : \ 프로그램 파일 \ 자바 \ jdk1.6.0_24 "이것에

:

netbeans_jdkhome ="C : \의 Program Files (x86) \ 자바 \ jdk1.6.0_21 "

문제는 넷빈즈는 지원을 64 비트에서 실행하지만, MS 액세스 될 수있다 32 비트. 이렇게하면 문제가 해결 될 것입니다. (((... 신비 ... 나를 위해 같은 문제를 해결, 솔직히, 내가 말을하려고하고있는 무슨처럼 해달라고을

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23734

0

:하지만 ... 또한이를 설치해야합니다 데이터베이스 변수를 정의하는 라인에

, 나는에 ... ( .MDB) ... 변경 ( .MDB * .accdb) ...

모든

그 차이점을 알아내는 데 가장 좋습니다!

+0

데이터 원본에서 드라이버의 실제 이름을 확인하여 해결했습니다. – Anuja

1

가장 큰 문제는 라인에있다 :

String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=TLDATABASEDBM.mdb"; 
  1. 가 .MDB 파일이 올바른 디렉토리에 있는지 확인합니다.
  2. 파일 확장명을 .mdb 또는 .mdbacc로 확인하십시오.

또한 동일한 DSN을 매번 사용하려면 mdb가 저장된 해당 시스템에 DSN (데이터 소스 이름)을 추가하는 것이 좋습니다.

0
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); 
     } 
    } 

} 
관련 문제