2013-06-04 8 views
5


Ostatnie dni próbowałem dowiedzieć się, jak uzyskać dostęp do baz danych MySQL za pośrednictwem Java. jestem w stanie załadować sterownika i uzyskać połączenie z bazą danych (przynajmniej tak mi się wydaje, bo nie dostają tam wyjątek ..)java.sql.SQLException: Nie wybrano żadnej bazy danych - dlaczego?

kod jest:

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

Kiedy ja go wykonać, to mówi:

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

ja naprawdę nie wiem, ten problem, bo myślałem, że baza danych jest wybrany podczas procesu „getConnection” ....
starałem się wybrać bazy danych przez dodanie ta linia:

stmt.executeUpdate("use test;"); 

po utworzeniu wyciągu.

Niestety to nie zadziałało, ponieważ dostałem inny wyjątek, który powiedział, że powinienem sprawdzić składnię. Nie rozumiem tego, ponieważ w moim wierszu poleceń działa dobrze ... Nie wiem, czy można używać tego typu poleceń przez Javę, więc jeśli tak nie jest, proszę wybaczyć mój błąd.

Mam nadzieję, że możesz mi pomóc i nie przegapiłem rozwiązania podczas własnych poszukiwań!

Już dziękuję wszystkim, którzy odpowiadają i wykorzystują swój czas na moje problemy!

ps. Gdybym zapomniał podkreślić pewne istotne infos (nie sądzę, ja) proszę pytać :)

edit: Próbowałem też utworzyć nową bazę danych podczas wykonywania

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

to faktycznie działa, ale Baza danych nie zostanie wybrana ...

+0

Tak na marginesie: ze sterownika JDBC, nie należy używać komend jak 'użytku 'aby przełączać się między bazami danych. Zamiast tego powinieneś użyć 'setCatalog' i/lub' setSchema' (lub określić bazę danych w łańcuchu połączenia). Użycie 'use ' może prowadzić do nieprawidłowego zachowania sterownika. –

Odpowiedz

6

Po pierwsze, jestem rozważa moją odpowiedź, aby pokazać inną drogę do lepszego połączenia z bazy danych MySQL, jest to o wiele łatwiejsze i mniej nu oczekiwano Exception (y).
trzeba zrobić kilka kroków:

  1. Pobierz Connector/J i dodać go do ścieżki klasy (jeśli używasz IDE nie jest dodać .jar do biblioteki, albo istnieje wiele tuts na YouTube).
  2. Utwórz bazę danych w swoim programie MySQL.
  3. Zobacz przykład poniżej przykładzie poniżej Zrobiłem dla ciebie pokazuje jak łączyć i wykonywania zapytań na 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

dzięki też działa! Domyślam się, że to był dziwny problem z moim konektorem ... – sepphuber3

+0

@ sepphuber3: your'r welcome, maybe and maybe ODBC (Not sure) :). – Azad

4

Przed dodaniem tabeli należy najpierw wybrać bazę danych. można utworzyć nową bazę danych z:

CREATE DATABASE database_name 

można podłączyć do konkretnej bazy danych z:

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

Mam ten sam problem. Przepraszam, zapomniałem powiedzieć ... Baza danych jest tworzona, ale wciąż nie wybrana. jak to zrobić? – sepphuber3

+0

Łączę się z moją bazą danych, dołączając adres URL, gdzie łączy się z nazwą bazy danych, jeśli używasz localhost, localhost/databasename –

+0

zaktualizowaną odpowiedź, w jaki sposób łączę się z moją bazą danych. Ta metoda działa dobrze w moim programie. –

0

Oto zaktualizowaną przykładem, który pracuje dla mnie.

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

Upewnij się, że do ścieżki budowy został dodany prawidłowy łącznik mysql. Użyłem: mysql-connector-java-5.1.24-bin.jar

+0

dziękuję! Wypróbuję złącze, którego używałeś jutro! Naprawdę mam nadzieję, że mogę przynieść, że to działa^^ – sepphuber3

+0

właśnie sprawdziłem to teraz :) działa dobrze dzięki znowu !! – sepphuber3