2013-06-04 9 views
5


gli ultimi giorni stavo cercando di imparare come accedere ai database mySQL tramite Java. Sono in grado di caricare il driver e ottenere una connessione al database (almeno io la penso così, dal momento che non ottengo un'eccezione lì ..)java.sql.SQLException: nessun database selezionato - perché?

il codice è:

import java.sql.*; 
    public class test 
    { 
     public static void main(String[] args) 
     { 
      try 
      { 
       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
       System.out.println("driver loaded..."); 
      } 
      catch(ClassNotFoundException e){ 
       System.out.println("Error in loading the driver..."+e); 
       System.exit(0); 
      } 
      try 
      { 
       Connection dbConnection= DriverManager.getConnection("jdbc:odbc:test","root","password"); 
       System.out.println("Connection successful..."); 
       Statement stmt = dbConntection.createStatement(); 
       stmt.executeUpdate("create table Accounts (name char(20))"); 
      } 
      catch(SQLException e) 
      { 
        System.out.println("database-ConnectionError: "+e); 
        System.exit(0); 
      } 
     } 
    } 

Quando ho eseguito, esso dice:

driver loaded...
Connection successful...
database-ConnectionError: java.sql.SQLException: [MySQL][ODBC 5.2(w) Driver][mysqld-5.5.31]No database selected

io davvero non so il problema, perché ho pensato che il database è stato selezionato durante il processo di "getConnection" ....
ho cercato di selezionare un database con l'aggiunta di questa riga:

dopo aver creato la dichiarazione.

sfortunatamente non ha funzionato perché ho ricevuto un'altra eccezione che diceva che dovevo controllare la sintassi. Non lo capisco perché nella mia linea di comando funziona bene ... Non so se è possibile usare questo tipo di comandi via Java, quindi se non lo è, perdona il mio errore.

Spero che tu possa aiutarmi e non ho perso la soluzione durante la mia ricerca!

Già Grazie a tutti quelli che rispondono e usano il loro tempo sui miei problemi!

ps. Se ho dimenticato di sottolineare alcune informazioni importanti (non credo che ho fatto io) si prega di chiedere :)

edit: Ho anche cercato di creare un nuovo database durante il runtime

 stmt.executeUpdate("CREATE DATABASE test;"); 

questo in realtà funziona, ma il database non sarà selezionato ...

+0

Per inciso: con un driver JDBC, non si dovrebbe usare i comandi come 'uso 'per passare da un database all'altro. Invece dovresti usare 'setCatalog' e/o' setSchema' (o specificare il database nella stringa di connessione). L'uso di "use " può comportare un comportamento errato del driver. –

risposta

6

In primo luogo, sto considerando la mia risposta per mostrare un altro modo migliore per il collegamento con il database MySQL, è molto più facile e meno nu-atteso eccezione (s).
Hai bisogno di fare alcuni passi:

  1. Scarica Connector/J e aggiungerlo al percorso della classe (se si utilizza un IDE c'è aggiungere il .jar alla biblioteca, o ci sono molti tuts su YouTube).
  2. Crea il tuo database nel tuo programma MySQL.
  3. Guarda questo esempio di seguito nell'esempio qui sotto ho fatto per voi dimostra come collegare ed eseguire query su MySQL:

    import java.sql.*; 
    
    public class MySqlConnection { 
        private String MYSQL_DRIVER = "com.mysql.jdbc.Driver"; 
        private String MYSQL_URL = "jdbc:mysql://localhost:3306/test"; 
    
        private Connection con; 
        private Statement st; 
        private ResultSet rs; 
    
        public MySqlConnection() { 
    
        try { 
         Class.forName(MYSQL_DRIVER); 
         System.out.println("Class Loaded...."); 
         con = DriverManager.getConnection(MYSQL_URL,"",""); 
         System.out.println("Connected to the database...."); 
         st = con.createStatement(); 
         int c =st.executeUpdate("CREATE TABLE Accounts (Name VARCHAR(30))"); 
         System.out.println("Table have been created."); 
         System.out.println(c+" Row(s) have been affected"); 
         con.close(); 
    
        } catch(ClassNotFoundException ex) { 
         System.out.println("ClassNotFoundException:\n"+ex.toString()); 
         ex.printStackTrace(); 
    
        } catch(SQLException ex) { 
         System.out.println("SQLException:\n"+ex.toString()); 
         ex.printStackTrace(); 
        } 
        } 
    
        public static void main(String...args) { 
        new MySqlConnection(); 
        } 
    } 
    
+0

anche grazie! Immagino sia stato uno strano problema con il mio connettore ... – sepphuber3

+0

@ sepphuber3: sei il benvenuto, forse e forse ODBC (non sono sicuro) :). – Azad

4

Prima di poter aggiungere una tabella, devi prima selezionare un database. è possibile creare un nuovo database con:

CREATE DATABASE database_name 

è possibile connettersi a un database specifico con:

String url = "jdbc:mysql://localhost/databasename"; 
String username = "test"; 
String password = "test"; 
Connection connection = DriverManager.getConnection(url, username, password); 
+0

Ho lo stesso problema lì. Scusa se ho dimenticato di dire che ... Un database è stato creato ma non è ancora stato selezionato .. come faccio? – sepphuber3

+0

Mi collego al mio database aggiungendo l'url dove ci si connette al nome del database se si sta eseguendo localhost, localhost/databasename –

+0

risposta aggiornata con come mi connetto al mio database. Questo metodo funziona bene nel mio programma. –

0

Ecco il vostro esempio aggiornato, che funziona per me.

public static void main(String[] args) throws InstantiationException, 
     IllegalAccessException { 
    try { 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     System.out.println("driver loaded..."); 
    } catch (ClassNotFoundException e) { 
     System.out.println("Error in loading the driver..." + e); 
     System.exit(0); 
    } 
    try { 
     Connection dbConnection = DriverManager 
       .getConnection("jdbc:mysql://localhost/test?user=root&password=password"); 
     System.out.println("Connection successful..."); 
     Statement stmt = dbConnection.createStatement(); 
     stmt.executeUpdate("create table Accounts (name char(20))"); 
    } catch (SQLException e) { 
     System.out.println("database-ConnectionError: " + e); 
     System.exit(0); 
    } 
} 

Assicurarsi di aver aggiunto un connettore mysql appropriato al percorso di generazione. Ho usato il: mysql-connector-java-5.1.24-bin.jar

+0

grazie! Proverò il connettore che hai usato domani! Spero davvero di poterlo portare in esecuzione ^^ – sepphuber3

+0

appena controllato ora :) funziona bene grazie ancora !! – sepphuber3

Problemi correlati