2010-12-01 17 views
9

को एक डेटाबेस डेटाबेस प्रोजेक्ट के लिए संकलित करना हम डेटाबेस प्रोग्राम (उपयोगकर्ता जीयूआई और डेटाबेस) बना रहे हैं। माइक्रोसॉफ्ट एक्सेस 2010 का उपयोग करके मैंने डेटाबेस बनाया और इसे कुछ नमूना डेटा के साथ पॉप्युलेट किया, और इसे .mdb प्रारूप में सहेजा और इसे मेरे प्रोजेक्ट फ़ोल्डर में रखा।जेडीबीसी का उपयोग कर जावा में माइक्रोसॉफ्ट एक्सेस डेटाबेस को कनेक्ट करना और

ग्रहण में इसे चलाने पर निम्न कोड ठीक काम करता है, कनेक्ट करता है और क्वेरी को भी पुनर्प्राप्त करता है। हालांकि मुझे लगता है कि मैं एक जार में कोड निर्यात करने में असमर्थ हूं और इसे चलाता हूं (जो परियोजना के लिए आवश्यक है, उन्हें अपने कार्यक्रम की एक सीडी या फ्लैश ड्राइव पर काम करने की प्रतिलिपि दें), और मैं पोर्ट को बंद करने में भी असमर्थ हूं 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 नहीं दिख रहा। आप कनेक्शन स्ट्रिंग में इस फ़ाइल को पूरा पथ दे सकते हैं या ओडीबीसी मैनेजर में सिस्टम डीएसएन जोड़ सकते हैं और उसके बाद कनेक्शन स्ट्रिंग के साथ कनेक्ट कर सकते हैं जैसे: jdbc:odbc:TLDATABASEDBM

+0

ठीक है, कोड के कार्य ग्रहण संस्करण के साथ परीक्षण करता है, तो फ़ाइल का पथ सही नहीं है मैं एक अज्ञात फ़ाइल त्रुटि नहीं खोल सकता नहीं एक "नहीं मिला डेटा स्रोत नाम और कोई डिफ़ॉल्ट चालक निर्दिष्ट" त्रुटि। मुझे यकीन नहीं है कि क्या मैं एक डीएसएन का उपयोग कर सकता हूं और जार काम कर सकता हूं क्योंकि मुझे पूरे डेटाबेस प्रोग्राम को पैकेज करने और इसे चलाने के लिए शिक्षक को देने की आवश्यकता है। मैंने पहले डीएसएन मार्ग का उपयोग करने का प्रयास किया लेकिन मुझे इसे काम करने में कुछ परेशानी हुई, मैं फिर कोशिश करूँगा और पूछूंगा कि क्या मैं प्रोग्राम चलाने के लिए मुझे पढ़ सकता हूं जब मैं प्रदर्शन के लिए टीए को देता हूं। फ़िर भी सहायता के लिए धन्यवाद। – Moogle

+0

ठीक है तो यह एक जेआर फ़ाइल के रूप में एक डीएसएन के साथ काम करता है। मेरा एकमात्र सवाल यह है कि अगर वे एक गैर विंडोज कंप्यूटर पर प्रोग्राम चलाते हैं तो यह काम नहीं करेगा, क्योंकि केवल विंडोज़ में एमएस एक्सेस फाइलों से कनेक्ट करने के लिए ड्राइवर हैं, है ना? और मुझे लगता है कि जावा का उपयोग कर एमएस एक्सेस। एमडीबी फाइल से कनेक्ट करने का कोई और तरीका नहीं है? धन्यवाद! – Moogle

+0

मैंने ज्योथन का उपयोग नॉर्थविंड एक्सेस डेटाबेस के साथ किया। यह कनेक्शन स्ट्रिंग के साथ काम करता है जिसमें पूर्ण। एमडीबी फ़ाइल नाम और डीएसएन है। मुझे यकीन नहीं है कि जावा में आपको '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_jdkhome = "C: \ Program Files \ जावा \ jdk1.6.0_24

आप सभी अपने NetBeans की स्थापना फ़ोल्डर में netbeans.conf पाते हैं और कुछ इस तरह से निर्देशिका बदल करना है

"

इस के लिए

:

netbeans_jdkhome =" C: \ Program Files (x86) \ जावा \ jdk1.6.0_21 "

समस्या NetBeans 64 बिट में चल रहा हो सकता है है, लेकिन एमएस एक्सेस केवल समर्थन 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 के रूप में जांचें।

इसके अलावा, यदि आप हर बार एक ही डीएसएन का उपयोग करना चाहते हैं, तो डीएसएन (डेटा स्रोत नाम) को संबंधित सिस्टम में जोड़ना बेहतर है जिस पर एमडीबी संग्रहीत किया जाता है।

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

}