2009-02-25 7 views
6

pourquoi ce programme ne s'exécute pas quand il entre dans la deuxième boucle while do et pourquoi il donne l'exception "Exception java.sql.SQLException: [MySQL] [Pilote ODBC 5.1] [mysqld-5.0.51a-community -nt] Aucune base de données sélectionnée "Pourquoi 'Aucune base de données sélectionnée' 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"); 
    } 

} 

Répondre

2

Juste en regardant l'exception .. Je suppose que vous ne spécifiez pas la base de données. Comment faire une sélection sur une table sans lui dire de quel schéma choisir? Ceci est généralement défini dans la chaîne de connexion ..

+0

Je présume son contenu dans la définition ODBC puisqu'est utilise JdbcOdbcDriver – toad

+0

Intéressant .. le nom du schéma est MySql ?? – markt

+0

Ce serait le nom d'une définition ODBC sur leur ordinateur – toad

6

À moins que vous ne deviez utiliser le pilote jdbc/odbc, j'utiliserais le pilote droit mysql jdbc. Vous pouvez le télécharger gratuitement depuis mysql.

puis

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

a trouvé un bug listing at MySQL qui donne cette erreur, mais avec des technologies différentes. Cependant, dans la description, cela indique qu'il est lié à une nouvelle autorisation de ne pas envoyer les informations de la base de données, alors peut-être que c'est ce que vous rencontrez ici aussi.

Certaines choses qui collent comme étrange pour moi (même si aucune idée si elles auront un impact sur votre erreur)

  • Il vous suffit de charger le gestionnaire de pilotes une fois
  • Vous ne fermons pas votre connexion, alors fermez-la ou refactorisez-la pour utiliser la même.

déplacer Peut-être ces deux lignes juste avant la boucle do

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

La source ODBC effectivement mis en place pour sélectionner une base de données? par exemple. pouvez-vous accéder à la base de données via un autre outil client ODBC?

Si vous devez sélectionner une base de données explicitement dans la chaîne JDBC, vous pouvez le faire en utilisant le paramètre 'database'. Mais avoir la base de données choisie dans la configuration ODBC serait plus habituel. Et en effet, comme l'a mentionné Clint, l'utilisation du pilote JDBC MySQL normal à la place d'ODBC serait encore plus courante.

while (str! = "N")

That's not how you compare strings in Java.

Questions connexes