2013-06-04 4 views
5


последние дни я пытался узнать, как получить доступ к базам данных mySQL через Java. Я могу загрузить драйвер и получить подключение к базе данных (по крайней мере, я так думаю, потому что я не получаю исключение там ..)java.sql.SQLException: база данных не выбрана - почему?

код:

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

Когда Я исполняю его, он говорит:

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

Я действительно не знаю эту проблему, потому что я думал, что выбрана база данных во время процесса «GetConnection» ....
я пытался выбрать базу данных путем добавления эта строка:

stmt.executeUpdate("use test;"); 

после создания заявления.

К сожалению, это не сработало, потому что у меня есть другое исключение, в котором говорится, что я должен проверить синтаксис. Я не понимаю, потому что в моей командной строке это работает просто отлично ... Я не знаю, можно ли использовать эти типы команд через Java, поэтому, если это не так, пожалуйста, простите мою ошибку.

Надеюсь, вы можете мне помочь, и я не пропустил решение во время своего собственного поиска!

Уже спасибо всем, кто отвечает и использует свое время на моих проблемах!

пс. Если я забыл отметить некоторые важные Infos (я не думаю, что я сделал), пожалуйста, спросите :)

редактировать: Я также пытался создать новую базу данных во время выполнения

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

это на самом деле работает, но база данных не будет выбрана ни ...

+0

Как и в сторону: с водителем JDBC, вы не должны использовать такие команды, как 'использования 'для переключения между базами данных. Вместо этого вы должны использовать 'setCatalog' и/или' setSchema' (или указать базу данных в строке подключения). Использование 'use ' может привести к неправильному поведению драйвера. –

ответ

6

Во-первых, я рассматриваю мой ответ, чтобы показать вам еще лучший способ для связи с базой данных MySQL, это намного проще и менее ню ожидается Exception (ы).
Вам нужно сделать несколько шагов:

  1. Скачать Connector/J и добавить его в свой класс путь (если вы используете IDE там добавить .jar в библиотеку, или есть много Татс на YouTube).
  2. Создайте свою базу данных в своей программе MySQL.
  3. Смотрите этот пример ниже приведенном ниже примере я сделал для вас показано, как подключить и выполнять запросы 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

спасибо, работы тоже! Я предполагаю, что это была странная проблема с моим коннектором ... – sepphuber3

+0

@ sepphuber3: ваш привет, может быть, и, возможно, ODBC (не уверен) :). – Azad

4

Прежде чем вы сможете добавить таблицу, вам сначала нужно выбрать базу данных. вы можете создать новую базу данных с:

CREATE DATABASE database_name 

вы можете подключиться к конкретной базе данных с:

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

У меня такая же проблема. Извините, я забыл сказать, что ... База данных создана, но все еще не выбрана. как это сделать? – sepphuber3

+0

Я подключаюсь к своей базе данных, добавляя URL-адрес, где вы связываетесь с именем базы данных, если вы используете localhost, localhost/databasename –

+0

обновленный ответ с тем, как я подключаюсь к моей базе данных. Этот метод отлично работает в моей программе. –

0

Вот ваш обновленный пример, который работает для меня.

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

Убедитесь, что вы установили правильный соединитель mysql в свой путь сборки. Я использовал: mysql-connector-java-5.1.24-bin.jar

+0

спасибо! Я попробую соединитель, который вы использовали завтра! Я действительно надеюсь, что смогу принести его запустить ^^ – sepphuber3

+0

только что проверил его сейчас :) отлично работает снова! – sepphuber3

Смежные вопросы