java.sql.SQLException:没有选择数据库 - 为什么?

时间:2013-06-04 21:33:31

标签: java mysql jdbc odbc 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)驱动程序] [mysqld-5.5.31]未选择数据库

我真的不知道这个问题,因为我认为在“getConnection”过程中选择了数据库.... 我尝试通过添加以下行来选择数据库:

    stmt.executeUpdate("use test;");
创建声明后

不幸的是它没有用,因为我得到了另一个例外,它说我应该检查语法。我不明白,因为在我的命令行中它工作得很好...... 我不知道是否可以通过Java使用这些类型的命令,所以如果不是,请原谅我的错误。

我希望你能帮助我,在我自己的搜索中我没有错过这个解决方案!

感谢所有回复并利用他们的时间处理我的问题的人!

PS。如果我忘了指出一些重要的信息(我不认为我这样做),请问:)

编辑:我还尝试在运行时

创建一个新数据库
     stmt.executeUpdate("CREATE DATABASE test;");

这实际上有效,但数据库也不会被选中......

3 个答案:

答案 0 :(得分:7)

首先,我正在考虑我的答案,向您展示与MySQL数据库连接的另一种更好的方法,它更容易,更少nu的预期异常
你需要做一些步骤:

  1. 下载Connector/J并将其添加到您的类路径中(如果您使用的是IDE,则会将.jar添加到库中,或者YouTube上有很多内容。)< / LI>
  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();
      }
    }
    

答案 1 :(得分:6)

在添加表之前,首先必须选择一个数据库。 您可以使用以下命令创建新数据库:

  CREATE DATABASE database_name

您可以使用以下命令连接到特定数据库:

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

答案 2 :(得分: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-connector。我使用了:mysql-connector-java-5.1.24-bin.jar