2009-02-25 13 views
6

यह प्रोग्राम निष्पादित नहीं होता है जब यह दूसरी बार लूप करते समय करता है और यह अपवाद क्यों दे रहा है "अपवाद java.sql.SQLException: [MySQL] [ODBC 5.1 ड्राइवर] [mysqld-5.0.51a-समुदाय -nt] कोई डेटाबेस नहीं चुना गया "क्यों 'कोई डेटाबेस चयनित नहीं' SQLException?

//import java.io.InputStream; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.Scanner; 
import java.util.Vector; 

public class DataBase { 

    public void LoadDriver() { 

     // Load the JDBC-ODBC bridge driver 
     try { 
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
     } catch (ClassNotFoundException ee) { 
      ee.printStackTrace(); 
     } 
    } 

    // 2.open a data source name by means of the jdbcodbcdriver. 

    static void connect() throws SQLException { 

     // Connect to the database 
     Connection con = DriverManager.getConnection("jdbc:odbc:MySQL", "root", "admin"); 
     Statement stmt = con.createStatement(); 
     // Shut off autocommit 
     con.setAutoCommit(false); 


     System.out.println("1.Insert 2.Delete 3.Update 4.Select"); 
     Scanner s = new Scanner(System.in); 
     int x; 
     x = s.nextInt(); 

     String query; // SQL select string 
     ResultSet rs; // SQL query results 
     boolean more; // "more rows found" switch 
     String v1, v2; // Temporary storage results 

     Vector<Object> results = new Vector<Object>(10); 


     if (x == 1) { 

      try { 
       stmt.executeUpdate("INSERT INTO employee(emp_id,emp_name) VALUES ('122','shiva') "); 
      } catch(Exception e){System.out.println("Exception " +e);e.printStackTrace();} 
     } 

     if (x == 2) { 

      try { 
       stmt.executeUpdate("DELETE from employee where emp_id='102' "); 
      }catch(Exception e){System.out.println("Exception "+e);e.printStackTrace();} 
     } 

     if (x == 3) { 

      try { 
       stmt 
         .executeUpdate("UPDATE employee SET emp_name = 'madavan' where emp_id='20'; "); 
      } catch(Exception e){System.out.println("Exception "+e);e.printStackTrace();} 
     } 


     query = "SELECT * FROM employee "; 
     try { 
      rs = stmt.executeQuery(query); 
      // Check to see if any rows were read 
      more = rs.next(); 
      if (!more) { 

       System.out.println("No rows found."); 
       return; 
      } 

      // Loop through the rows retrieved from the query 
      while (more) { 

       v1 = "ID: " + rs.getInt("emp_id"); 
       v2 = "Name: " + rs.getString("emp_name"); 

       System.out.println(v1); 
       System.out.println(v2); 
       System.out.println(""); 

       results.addElement(v1 + "\n" + v2 + "\n"); 

       more = rs.next(); 
      } 
      rs.close(); 

     } catch (SQLException e) { 
      System.out.println("" + results.size() + "results where found."); 
     } 
     finally{stmt.close();} 
    } 

    public static void main(String[] args) throws SQLException { 
     String str = "y"; 
     do { 
      DataBase s = new DataBase(); 
      s.LoadDriver(); 
      DataBase.connect(); 
     Scanner sc = new Scanner(System.in); 
     System.out.println("DO u Want to PROCEED TO QUERY : "); 
     str = sc.next(); 
     } while (str !="n"); 
    } 

} 

उत्तर

2

बस अपवाद को देखने से .. मुझे लगता है कि आप डेटाबेस निर्दिष्ट नहीं कर रहे हैं। आप बिना किसी स्कीमा को चुनने के बिना टेबल पर चयन कैसे कर सकते हैं? यह आमतौर पर कनेक्शन स्ट्रिंग में सेट होता है ..

+0

मुझे लगता होगा इसकी ODBC परिभाषा के बाद से है JdbcOdbcDriver – toad

+0

दिलचस्प .. उपयोग कर रहा है स्कीमा नाम MySql है में निहित ?? – markt

+0

यह उनके कंप्यूटर – toad

6

जब तक आपको jdbc/odbc ड्राइवर का उपयोग नहीं करना है, तो मैं सीधे mysql jdbc ड्राइवर का उपयोग करूंगा। आप इसे mysql से मुक्त डाउनलोड कर सकते हैं।

तो

public void LoadDriver() { 

     // Load the JDBC-ODBC bridge driver 
     try { 
       Class.forName("com.mysql.jdbc.Driver"); 
     } catch (ClassNotFoundException ee) { 
       ee.printStackTrace(); 
     } 
} 

static void connect() throws SQLException { 

     // Connect to the database 
     Connection con = DriverManager.getConnection("jdbc:mysql:host/databasename", "root", "admin"); 
     Statement stmt = con.createStatement(); 
... 
0

मिले एक bug listing at MySQL कि इस त्रुटि देता है, लेकिन विभिन्न तकनीकों के साथ। हालांकि, विवरण में यह इंगित करता है कि यह पुन: प्राधिकरण से संबंधित है, जो डेटाबेस की जानकारी नहीं भेज रहा है, इसलिए शायद यही वह है जो आप यहां भी सामना कर रहे हैं।

कुछ चीजें हैं जो मुझे करने के लिए के रूप में अजीब बाहर छड़ी (हालांकि कोई सुराग नहीं है अगर वे अपने त्रुटि पर कोई असर पड़ेगा)

  • आप केवल ड्राइवर प्रबंधक एक बार
  • आप को बंद नहीं कर रहे हैं लोड करने के लिए की जरूरत है आपका कनेक्शन, तो या तो इसे बंद करें या उसी का उपयोग करने के लिए रिफैक्टर करें।

शायद इन दो पंक्तियों बस से पहले do पाश

DataBase s = new DataBase(); 
s.LoadDriver(); 
1

ODBC स्रोत वास्तव में एक डेटाबेस का चयन करने की स्थापना की है में ले जाएँ? जैसे। क्या आप किसी अन्य ओडीबीसी क्लाइंट टूल के माध्यम से डेटाबेस तक पहुंच सकते हैं?

यदि आपको जेडीबीसी स्ट्रिंग में स्पष्ट रूप से डेटाबेस का चयन करने की आवश्यकता है तो आप 'डेटाबेस' पैरामीटर का उपयोग करके ऐसा कर सकते हैं।

लेकिन ओडीबीसी सेटअप में चयनित डेटाबेस होने से अधिक सामान्य होगा। और वास्तव में, जैसा क्लिंट ने उल्लेख किया है, ओडीबीसी के बजाय सामान्य माईएसQL जेडीबीसी ड्राइवर का उपयोग करना अभी भी अधिक सामान्य होगा।

जबकि (str! = "N")

That's not how you compare strings in Java.

संबंधित मुद्दे