web-dev-qa-db-ja.com

java.sql.SQLException:データベースが選択されていません-なぜですか?


私がJava経由でmySQLデータベースにアクセスする方法を学ぼうとしていた最後の日。ドライバーをロードしてデータベースへの接続を取得することができます(少なくとも、例外が発生しないため、そう思います。)

コードは次のとおりです。

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

私がそれを実行すると、それは言います:

ドライバーがロードされました...
接続に成功しました...
database-ConnectionError:Java.sql.SQLException:[MySQL] [ODBC 5.2(w)Driver] [mysqld-5.5.31]データベースが選択されていません

「getConnection」プロセス中にデータベースが選択されたと思ったので、私は本当に問題を知りません。
次の行を追加してデータベースを選択しようとしました:

    stmt.executeUpdate("use test;");

ステートメントを作成した後。

残念ながら、構文を確認する必要があるという別の例外が発生したため、機能しませんでした。私のコマンドラインでは問題なく動作するので、それもわかりません... Javaを介してこれらのタイプのコマンドを使用できるかどうかはわかりませんが、そうでない場合は、私の間違いを許してください。

あなたが私を助けてくれることを願っています、そして私は私自身の検索中に解決策を見逃しませんでした!

返信して私の問題に時間を費やしてくれたすべての人に感謝します!

ps。重要な情報を指摘するのを忘れた場合(私はそうは思わなかった)、質問してください:)

編集:実行時に新しいデータベースを作成しようとしました

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

これは実際には機能しますが、データベースも選択されません...

8
sepphuber3

まず、MySQLデータベースに接続するための別のより良い方法を示すために私の答えを検討しています。それははるかに簡単でnu-expectedException(s)です。
いくつかの手順を実行する必要があります。

  1. ダウンロード Connector/J そしてそれをクラスパスに追加します(IDEを使用している場合は、ライブラリに.jarを追加するか、 YouTube )の多くのtuts。
  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();
      }
    }
    
7
Azad

テーブルを追加する前に、まずデータベースを選択する必要があります。次のコマンドで新しいデータベースを作成できます。

  CREATE DATABASE database_name

次の方法で特定のデータベースに接続できます。

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

これが私のために働くあなたの更新された例です。

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-connectorが追加されていることを確認してください。私は使用しました:mysql-connector-Java-5.1.24-bin.jar

0
My-Name-Is